2017-11-09 5 views
6

먼저이 문제에 대한 해결책이 있다면 사과드립니다.하지만 Three.js와 A-Frame 문서를 통해 많은 파고를했습니다. 스택 오버플로로서 내가 찾고있는 것을 찾지 못했습니다.Three.js의 Coplanar 점 집합에서 가장 적합한 직사각형

내가하고 싶은 일은 내가 동일 평면 상에있는 것으로 이미 알고있는 Vector3 세트로부터 가장 적합한 A- 프레임 평면을 만드는 것입니다. 이것은 비행기의 각도가 90의 배수 인 경우 쉽게 수행 할 수 있지만 Box3s의 .setFromPoints() 알고리즘은 필요한 방식으로 작동하지 않습니다.

Three.js에서 A-Frame으로 전환하는 것은 나 자신을 처리 할 가능성이 높지만 누군가가 환영 받기 만하면되는 것입니다. 실제로 의미가있는 사각형 평면을 만들어야합니다.

오히려 너무 많이 낭비되는 공간과 가벼운 상자 /면보다는 굵은면을 만듭니다

는 기본적으로,이 작업을 수행하는 알고리즘을 만들려고합니다.

Drawing Explanation

나는 완벽 이미 수행 한 점을 맞는 사용자 정의 형상을 작성하지 않습니다. 실제로 높이, 너비, 위치 및 회전 특성 만있는 A- 프레임 평면이 필요합니다. 이것은 정확도가 떨어지는 것을 잘 알고 있지만, 내가하고있는 일에 훨씬 더 이상적입니다.

+0

@Soronbe 좋은 성능이 분명 선호되지만 필수는 아닙니다. 그냥 일을하려고 노력하는 것뿐입니다. 주어진 세트의 정점의 양은 대개 약 10-15이지만 대부분은 405입니다. – Roberto

답변

1

먼저 포인트를 통과하는 최상의 선을 찾으십시오. 이것을 "라인 맞춤"이라고합니다 : http://stackoverflow.com/questions/2352256/fit-a-3d-line-to-3d-point-data-in-java, 3 차원이 아닌 2 차원에서 쉽게 수행 할 수 있어야합니다. 여기에 또한보십시오 : https://en.wikipedia.org/wiki/Deming_regression 선은 당신에게 각을 준다, 점의 수직 거리의 minmax는 직사각형의 고도이다, 선에 수직 발 지점의 위치의 minmax는 직사각형의 폭을 만든다. 또는 모든 점을 선의 음각만큼 회전하고 직사각형의 폭과 높이에 대한 점의 x 및 y 구성 요소의 최소값을 계산하면됩니다.

1

예, 이전의 대답은 구현하기 어렵습니다. 다른 아이디어는 다음과 같습니다 : 포인트의 볼록 선체를 계산하십시오 (https://en.wikipedia.org/wiki/Graham_scan은 의사 코드로 간단하고 효율적인 알고리즘을 제공합니다). 안쪽 포인트는 관련이 없습니다. 최적의 직사각형은 볼록한 선체의 측면 중 적어도 하나와 일치해야합니다. 볼록 선체의 모든 측면의 각은 그 각도를 가진 사각형의 크기를 계산합니다. 다음 최소값을 가지고 가십시오.