2011-01-10 12 views
5

Pozdrowienia,Wykrywanie dowolnych kształtów

Mamy zestaw punktów, które reprezentują przecięcie korpusu 3d i płaszczyzny poziomej. Chcielibyśmy wykryć kształty 2D, które reprezentują przekroje ciała. Może istnieć jeden lub więcej takich kształtów. Znaleźliśmy artykuły omawiające operacje na obrazach za pomocą transformacji Hough, ale możemy mieć tysiące takich punktów, więc konwersja na obraz jest bardzo nieekonomiczna. Czy istnieje prostszy sposób na zrobienie tego?

Dziękuję

+0

Czy mówisz o dowolnym typie kształtu 3D, czy też są jakieś ograniczenia aplikacji lub domeny? –

+0

Chcesz uzyskać rozpoznawanie wzoru na wielokątach 2D? – ltjax

+0

@Andre, Hello, mówię o dowolnym kształcie * 2d *. Ponieważ ciało 3d jest w kształcie gałęzi drzewa, prawdopodobnie będzie blisko elipsy – Ojala

Odpowiedz

5

W konwersja modelu 3D do zbioru punktów, zostały wyrzucone informacji wymaganych znaleźć kształty skrzyżowaniu. Przejdź do wykresu łączliwości krawędzi z Twojego modelu 3D, aby znaleźć punkty przecięcia płaszczyzny krawędzi w kolejności.

zakładając, że masz, albo można skonstruować, 3D modelu topografia (niektóre liczba wierzchołków, krawędzi między wierzchołków twarze związanymi krawędziami):

  1. iterację listy krawędzi, aż znajdziesz taki, która przecina Test samolot, dodać go do listy
  2. Wybierz jedną z twarzy, które podzielają tę przewagę
  3. iterację pozostałych krawędziach tej twarzy, aby znaleźć kolejne skrzyżowanie, dodać go do listy
  4. powtórz dla drugiej twarzy który dzieli tę przewagę, dopóki nie wrócisz t krawędzi wyjściowej

pan zbudowany uporządkowaną listę krawędzi, które przecinają płaszczyznę - to trywialne liniowo interpolować każdą krawędź, aby znaleźć punkty przecięcia, tak, że tworzą kształt przecięcia. Zauważ, że proces ten zakłada, że ​​wielokąty twarzy są wypukłe, co w twoim przypadku jest. Jeśli twoja objętość jest wklęsła, będziesz mieć wiele dyskretnych kształtów przecięć, a więc musisz powtarzać ten proces, aż wszystkie brzegi zostaną zbadane.

Istnieje kod Java, który wykonuje to here i dość sprytna aplikacja testowa here.

Kontrole:

  • 1-5 zmienić Testowana objętość
  • qiw zmieniać liczbę płaszczyzn zapytania
  • , S i D, w celu zmiany szybkości skanowania zapytania samoloty
  • lewej kliknij-przeciągnij, aby obrócić widok
  • prawym przyciskiem przeciągania do obracania płaszczyzny zapytań
0

Algorytm/kod z zaakceptowanej odpowiedzi nie działa dla złożonych przypadków specjalnych, gdy płaszczyzna przecina niektóre wierzchołki wklęsłej powierzchni. W tym przypadku "chodzenie" wykres chciwości na krawędziach może z czasem zamknąć niektóre wielokąty.

Co się dzieje, ponieważ płaszczyzna przecina wierzchołek, w pewnym momencie podczas przechodzenia przez wykres istnieją dwie możliwości dla następnej krawędzi i nie ma znaczenia, który z nich jest wybrany.

Możliwe rozwiązanie to implementacja algorytmu trajektorii wykresu (na przykład wyszukiwanie z głębokim początkiem) i wybór najdłuższej pętli, która zawiera początkową krawędź.

Powiązane problemy