Wykrywanie blisklości obiektów w 3D

0

Siema,

Mam 2 obiekty(płaszczyzny, które mogą mieć dowolny kształt w 2 wymiarach), które są typu "Mesh". Mesh składa się z trójkątów.
Z każdego mesha mogę pozyskać wszystkie trójkąty, z których się składa. Z trójkątów mogę pobrać 3 punkty, z których się składa p0, p1, p2(x, y, z).
Mam też dostępny obiekt "płaszczyzna"(matematyczny, nie powiązany z powyższymi), który bierze point0 od trójkąta, jego "normalną", tworząc płaszczyznę opisującą trójkąt.

Zadanie jest takie, że jeśli wykryje odległość mniejszą lub równą pewnej granicy(1 cm) mam zwrócić true(x,y,z) lub (xy) lub (xz) lub (yz).

Mój pierwszy pomysł był taki żeby iść po każdym trójkącie z pierwszego mesha, opisywać jego trójkąty jako płaszczyzny, porównywać go z wszystkimi trójkątami drugiego mesha(również opisanymi jako płaszczyzny), sprawdzać najmniejszą odległość między płaszczyznami i jak wykryje przekroczony treshold to zwraca true.

Niestety okazało się, że płaszczyzny nie miały metody liczącej odległości pomiędzy nimi więc zrobiłem coś innego.

Opisuję pierwszy trójkąt jako płaszczyznę i sprawdzając jej odległość z każdym bokiem każdego trójkąta mesha2(p0, p1, p2) sprawdzam czy odległość spełnia powyższy warunek, jeśli tak to po prostu zwracam true).

To drugie rozwiązanie nie jest optymalne i zastanawiam się jak mógłbym to poprawić/zmienić.

1

Rozumiem, że te dwuwymiarowe obiekty obiekty są zanurzone w trójwymiarowej przestrzeni. Ale dlaczego Piszesz, że nie ma metody liczenia odległości między płaszczyznami; nie wystarczy Ci odległość między punktem a płaszczyzną?
http://mathworld.wolfram.com/Point-PlaneDistance.html

0
lion137 napisał(a):

Rozumiem, że te dwuwymiarowe obiekty obiekty są zanurzone w trójwymiarowej przestrzeni. Ale dlaczego Piszesz, że nie ma metody liczenia odległości między płaszczyznami; nie wystarczy Ci odległość między punktem a płaszczyzną?
http://mathworld.wolfram.com/Point-PlaneDistance.html

Tak, 2D obiekty są w 3D przestrzeni.
Po prostu nie ma takiej metody(najmniejsza odległość miedzy plaszczyznami) żeby to zaimplementować musiałbym naruszyć coś i wprowadzać zmiany, z którymi będzie problem.
Właśnie napisałem, że liczę dystans pomiędzy płaszczyzną(kolejnym trójkątem pierwszego mesha) dokładnie najbliższym punktem płaszczyzny a punktami p0, p1, p2 drugiego trójkąta(n-tego). Dopóki nie znajdę tej odległości.
Ten algorytm bardzo dobrze wykrywał odległość ale jest zbyt kosztowny.

0

Czyli teraz Sprawdzasz wszystkie trójkąty pierwszego z wszystkimi drugiego? Wystarczy, jeśli płaszczyzny nie są równoległe, policzyć minimum: brzegi pierwszej z całą drugą i na odwrót; na pewno mniej liczenia.

1 użytkowników online, w tym zalogowanych: 0, gości: 1