>> Szerintem úgy lehet megállapítani egy testrol,
>> hogy konvex vagy konkáv, hogy felvesszük a vizsgálatban
>> szereplo síkot, valamint azok mellett két oldalon
>> még kettot nagyon kis távolságra egymás mellett.
>> Ha a két szélsoben metszet jön létre, akkor a test
>> konkáv, egyébként konvex.
>
> Ezzel az a baj, hogy a "kis" tavolsag nem megfoghato: mindig lehet mutatni
> olyan testet, amire ez az algoritmus tevedne. Elmondom a legnaivabb
> megoldast. A testunk ugye poligon lapokbol all. Minden csucspontra vesszuk
> a tobbi csucsponton atmeno egyeneseket, es megnezzuk, hogy az egyenes
> metsz-e lapokat. Ha nem metsz, akkor konvex. Ennyi, csak eleg koltseges.
Ez tenyleg eleg koltseges. Itt van egy egyszeru:
Egy konvex test minden lapjara igaz, hogy a tobbi (tehat nem ahhoz a laphoz
tartozo) csucs a lap altal meghatarozott sik azonos oldalan van.
Leforditva szamolasra:
vegyuk az elso lapot, amit az A B C csucsok hataroznak meg (ha tobbszog, az
nem lenyeges, hiszen tetszoleges harom meghatarozza a sikot). Keszitsunk egy
sikra meroleges vektort az A pontban:
T = (B-A) X (C-A), ahol X a vektorszorzat jele.
A sorrend mindegy, a (C-A) X (B-A) csak elojelben kulonbozik. Ez megad egy
sikra meroleges vektort az A pontban.
Utana az osszes tobbi csucsra (d e f g h ... z) kiszamolando az A-ba eltolt
skalarszorzat:
T * (d-A)
T * (e-A)
...
T * (z-A)
Ha ezek elojele egymassal megegyezik (nem nulla), akkor azonos oldalon
vannak.
Majd ugyanez az osszes lapra. Ha mindegyik lapra stimmel, akkor konvex.
Egy N lapu test kb. 10*N^2 szorzassal elintezheto.
Udv,
Jozsi.
|