Skocz do zawartości

[C++][OpenGL] Powłoka wypukła


raV

Polecane posty

Muszę wyznaczyć z zadaną dokładnością powłokę wypukłą zbioru punktów z przestrzeni trójwymiarowej, tak aby żaden z punktów nie wystawa ponad nią bardziej niż ustalę.

 

Dla powierzchni znam algorytm Grahama. Dla 3D nie znam odpowiednika.

Jeżeli idzie o tą "dokładność", chodzi o to, żeby zmniejszyć czas obliczeń. Myślałem o podziale przestrzeni na podobszary i otaczaniu "wokseli o krawędzi (np) 10px" ..

Link do komentarza
Udostępnij na innych stronach

Chyba mowa o otoczce wypukłej w 3d ;]

 

Można zrobić to bruteforce dość prosto.

Bierzesz 4 punkty i tworzysz z nich czworościan wypukły.

Sprawdzasz kolejne punkty:

Jeśli punkt znajduje się wewnątrz czworościanu to go pomijasz jeśli nie to dodajesz go do bryły jako nowy wierzchołek i budujesz ściany podparcia. Trzeba usunąć tutaj wcześniej dodawane wierzchołki które automatycznie mogą znajdować się wewnątrz nowej bryły.

Metoda nie jest najszybsza ale względnie prosta.

 

Opengl tego nie załatwi... No chyba że narysujesz wszystkie możliwości trójkątów na zbiorze wierzchołków z depth testem to wynikiem na ekranie faktycznie będzie otoczka wypukła ale to bezsnesowne i niepraktyczne :P

www.spider.dathox.com :)

Link do komentarza
Udostępnij na innych stronach

 

Jeśli punkt znajduje się wewnątrz czworościanu to go pomijasz jeśli nie to dodajesz go do bryły jako nowy wierzchołek i budujesz ściany podparcia. Trzeba usunąć tutaj wcześniej dodawane wierzchołki które automatycznie mogą znajdować się wewnątrz nowej bryły.

 

 

Dzięki za odpowiedź. Być może to, czego szukam to otoczka wypukła a nie powłoka wypukła. Potrzebuję różnych pomysłów, również wolnych (żeby inne były "szybkie" :-)

Powiedz mi tylko, jak sprawdzić, czy punkt leży wewnątrz bryły, a jeżeli leży, to jakie ściany stworzyć a które usunąć ?

Link do komentarza
Udostępnij na innych stronach

By sprawdzić czy punkt jest wewnątrz bryły wystarczy sprawdzić czy znajduje się dla wszystkich ścian po tej samej stronie płaszczyzn wyznaczanych przez ściany z których składa się bryła. Do tego zadania wystarczy równanie płaszczyzny lub google :P

Jeżeli nowy punkt leży wewnątrz bryły to go pomijasz.

Jeśli któryś ze starych punktów leży wewnątrz bryły po dodaniu nowego punktu to usuwasz wszystkie ściany z którymi się łączy.

Największy problem tego algorytmu to dodawanie nowego punktu, wymaga znalezienia płaszczyzn stycznych do krawędzi na których będą znajdować się nowe ścianki.

 

Ogólnie jeśli nie masz trochę obycia z geometrią obliczeniową to radzę poszukać gotowych algorytmów pod hasłem "3d convex hull" :)

www.spider.dathox.com :)

Link do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.

×
×
  • Utwórz nowe...