2014-04-06 2 views
3

평상시에는 n, 평면상의 점에 대해서는 q을 보유하는 Plane 클래스가 있습니다. 또 다른 점 p도 그 비행기에 있습니다. 해당 비행기의 가장 가까운 단위로 반올림을하려면 으로 이동하십시오. 커서를 3D 그리드에 스냅하는 것처럼 그리드는 회전하는 평면이 될 수 있습니다.평면을 기준으로 3D 점 반올림

이미지는 설명하기 : enter image description here

레드가 현재의 포인트입니다. 녹색은 내가 얻으려고 노력하는 둥근 점이다.

+1

정수부? – Paranaix

+1

나는 평범한 평면을 무효화 할 수 있기 때문에 필요한 것을 2D로 표현할 수 있습니다. 간단한 산술을 사용하여 가장 가까운 점에 X와 Y 점을 스냅 한 다음 다시 평면을 적용 할 수 있습니다. – Havenard

+0

네,하지만 어떻게 평면 법선을 적용/무효화합니까? 그것들은 나에게 단지 말이며 구글은 오늘날 우호적이지 않다. – user3473422

답변

0

아마도 이것을 달성하는 가장 쉬운 방법은 평면을 회전하고 이동 한 좌표계를 정의하는 것입니다. 이를 통해 전역 좌표의 점을 평면 좌표로 변환하고 역으로 변환하기위한 행렬을 구성 할 수 있습니다. 일단 이것을 얻으면 간단하게 점을 평면 좌표로 변환하고, 사소한 방식으로 반올림/투영을 수행 한 다음 다시 세계 좌표로 변환 할 수 있습니다.

물론 문제는 당신이 질문하는 방식에 대해 명시되어 있지 않습니다. 필요한 변환에는 6 자유도가 있으며 평면 방정식은 세 가지 제약 조건 만 산출합니다. 따라서 더 많은 정보를 추가해야합니다 : 평면 내 원점의 위치 및 평면 주위의 그리드 회전.

개인적으로는 파라 메트릭 형태의 평면 설명 파생로 시작할 것 : 물론

xVec = alpha*direction1 + beta*direction2 + x0 

이 같은 설명은 아홉 개 변수 (세 벡터)를 포함,하지만 당신은 두 방향 벡터를 정상화 할 수 있으며, 두 방향 벡터가 직각이되도록 제한 할 수있어 자유의 양을 다시 6으로 줄입니다.

정규화 된 법선과 함께 두 표준화 된 방향 벡터는 회전 된 좌표계의 기본 벡터이므로이 세 벡터를 함께 배치하여 회전 행렬을 간단하게 만들 수 있습니다. 역 회전을 얻으려면 결과 행렬을 조 변경하십시오. 회전의 적절한면에 번역/역변환을 추가하면 완료됩니다.

+0

그리고 그 일을 어떻게 하죠? 이론은 나의 장점이 아니다. – user3473422

+0

그 개체를 정확히 조작하는 방법에 따라 다릅니다. 라이브러리를 사용하고 있습니까? 우리가 당신을 도울 수있는 어떤 것도 지정하지 않았습니다. – Havenard

+0

글쎄, 행렬 및 벡터에 GSL을 사용하고 있지만 회전 행렬을 설정하는 방법을 모른다. – user3473422