2017-11-09 64 views
6

Po pierwsze, przepraszam, jeśli jest gdzieś na to rozwiązanie, ale dużo przekopałem się również za pomocą dokumentów Three.js i A-Frame jako Stack Overflow i nie znalazłem tego, czego szukam.Najlepszy dopasowany prostokąt od zestawu Coplanar Points w Three.js

Co chcę zrobić, to stworzyć najlepiej dopasowaną płaszczyznę A-Frame z zestawu Vector3, które już wiem, są współpłaszczyznowe. Można to łatwo zrobić, jeśli kąt płaszczyzny jest wielokrotnością 90, ale cokolwiek innego i algorytm .setFromPoints() dla Box3s nie działa tak, jak tego potrzebuję.

Konwersja z Three.js na A-Frame Najprawdopodobniej poradzę sobie, ale jeśli ktoś chce się z tym uporać, jest mile widziany. Po prostu muszę stworzyć prostokątną płaszczyznę, która ma sens.

Zasadniczo, chcę stworzyć algorytm, który wykonuje to:

Tworzenie pogrubiony samolotu, zamiast zapalniczki box/samolot z zbyt dużo niewykorzystanego miejsca.

Drawing Explanation

Nie chcę, aby utworzyć niestandardowy geometrię, która doskonale pasuje do punktów, co już robiłem. Właściwie chcę tylko płaszczyzny A-Frame z atrybutami wysokości, szerokości, położenia i obrotu. Rozumiem, że jest to mniej precyzyjne, ale jest o wiele bardziej idealne dla tego, nad czym pracuję.

+0

@Soronbe Dobra wydajność jest oczywiście preferowana, ale nie wymagana. Próbuję tylko sprawić, żeby wszystko działało. A liczba wierzchołków w danym zestawie wynosi zwykle około 10-15, ale najwięcej to 405. – Roberto

Odpowiedz

1

Najpierw znajdź najlepszą linię przechodzącą przez punkty. Nazywa się to "dopasowaniem liniowym", tak jak tutaj: http://stackoverflow.com/questions/2352256/fit-a-3d-line-to-3d-point-data-in-java, powinno być łatwo zrobić to w dwóch wymiarach zamiast trzech. Zobacz także tutaj: https://en.wikipedia.org/wiki/Deming_regression Linia podaje kąt, minmax prostopadłej odległości punktów jest wysokością prostokąta, minmax pozycji prostopadłych punktów stopy do linii tworzy szerokość prostokąta. Albo obrócisz wszystkie punkty o ujemny kąt linii i po prostu obliczysz wartości minmax elementów X i Y punktów dla szerokości i wysokości prostokąta.

1

OK, może moja poprzednia odpowiedź jest trudna do wdrożenia. Oto kolejny pomysł: obliczyć wypukły kadłub swoich punktów (https://en.wikipedia.org/wiki/Graham_scan zapewnia prosty i wydajny algorytm z pseudo kodem). wewnętrzne punkty nie są istotne. Optymalny prostokąt musi pokrywać się z co najmniej jednym bokiem wypukłego kadłuba. Przy wszystkich kątach boków wypukłego kadłuba oblicz wymiary prostokąta pod tym kątem. Następnie weź minimum.