Kezdőoldal » Számítástechnika » Programozás » Konkáv testek offszetelésére...

Konkáv testek offszetelésére ismer valaki publikus algoritmust?

Figyelt kérdés
Hogyan kezelnétek le az offszetelésnél eltűnő felületi síkidomokat?

2015. jan. 14. 18:03
 1/5 anonim ***** válasza:

Kicsit hosszú, de jól leírja az algoritmust: [link]


Nem igazán értem mit értesz az alatt hogy hogyan kezelnénk le az eltűnő síkidomokat. Mit akarsz rajtuk lekezelni?

2015. jan. 14. 19:07
Hasznos számodra ez a válasz?
 2/5 A kérdező kommentje:

Köszi a linket! Elolvasom.


Hát konvex testeknél előfordulhat, hogy egy felületi régiónak nem lesz offset-elt megfelelője, vagy szétesik több kisebb régióra, vagy az eredmény régió teljesen másképp néz ki. Csak arra voltam kíváncsi, hogy milyen módszerek vannak arra, hogy ez egzakt módon legyen lekezelve.


A mostani elképzelésem szerint solid bool műveletekkel akarom kivitelezni a dolgot, csak elég bonyolult az algoritmus és az érdekelt hogy vannak-e egyszerűbb megoldások.


A numerikus pontatlanságok lekezelése okozza a legtöbb problémát (ugye a véges számábrázolás miatt), mert ha pl. síklapokkal határolt felületű "gömböt" offset-elek, akkor a kis szöget bezáró felületi elemekből generált testek összemetsződéseinél elő tudnak állni problémás helyzetek.


Már az sokat segítene, ha lenne valami 128 bites double osztály, amihez vannak rendes szögfüggvények. C++-ban csinálom amúgy.

2015. jan. 16. 09:28
 3/5 anonim ***** válasza:

Ha jól értem az a problémád hogy több csúcspont is kerülhet ugyan azon helyre offsetelés után, de a double és a float pontatlansága miatt nem ugyan azok lesznek az koordinátáik.


De nem is kell. Nem ismerem az hogy te hogyan adod meg a modelljeid szerkezetét, de azt tudom hogy szokás:


1. Megadod a ponthalmazt,

2. Megadod a háromszögeket a ponthalmaz pontjai alapján.


2 tömböd van minden modellhez. Ez a bemenet, ez lesz a kimenet. Vedd észre hogy halmazokról beszélünk, egy és ugyan azon elemből nincs kettő a halmazban. Az offsetelés után (ha kicsinyítésről van szó) a halmaz mérete csökkenni fog, hiszen pont ez a lényege: azzal hogy a felbontást csökkentjük, megnöveljük a kiszámítás sebességét.


Ez azt jelenti hogy törölni kell pontokat és törölni kell háromszögeket. Pontokat úgy törölsz hogy miután az offseteléssel ráilleszted a rácsra a pontot, ellenőrzöd hogy ott van e már pont: ne felejtsd el, lebegőpontos számot nem == operátorral tesztelsz hanem definiálsz egy epszilon küszöbindexet (és a teljesítmény érdekében nem minden ponttal tesztelsz hanem csak a szomszédos pontokkal ha lehet). Amikor törölsz egy csúcspontot, a csúcspontot használó háromszögeknél átírod a csúcspont hivatkozását az újra, és teszteled hogy a háromszög másik két csúcsa közül az egyik nem véletlenül ugyan az a csúcs. Ha igen, törlöd a háromszöget, hiszen ha 2 csúcsa megegyezik, akkor az már csak egy egyenes.


Így csökkented a pontok és háromszögek halmazát, és közben számolod ki az új pontokat. Csak azt a lépést hagytad ki hogy nem törölted a feleslegessé vált pontokat, háromszögeket, pedig pont ez lenne a lényege.

2015. jan. 16. 16:00
Hasznos számodra ez a válasz?
 4/5 A kérdező kommentje:
Sokfajta geometriai leképezés létezik, nem csak háromszögháló.
2015. jan. 20. 00:03
 5/5 anonim ***** válasza:

Ez így van. És? Nem értem a problémád, de szerintem te sem.

A fentebb leírt algoritmus minden síkidomra ráillik, a probléma ugyan az és ugyan úgy kell orvosolni.. Felesleges pontokat törölni, eltűnő háromszögeket törölni. Mert minden sokszögből háromszög lesz egyszer ha elkezded törölgetni a csúcsait. A tárolást meg te oldod meg. Szerintem gondold végig még egyszer.

2015. jan. 20. 19:25
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:





Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!