2016-07-07 2 views
0

오리엔테이션이 q1이고 오리엔테이션이 q2 인 장면이 un 인 평면 뷰 평면 vn이 있다고 가정합니다.보기 평면에서 한 점을 장면의 평면에 역 직교 투영하는 방법은 무엇입니까?

q1q2은 쿼터니언이다.

알 수없는 점 ux, uy, uzproj_u_plane_vn이 알려진 점인 vx, vy, 0과 어떻게 일치합니까?

상대적 방향 q2-q1을 찾는 것이 더 간단할까요?

지금은 i, j 및 k 값을 사용하여 작업하려고하지만 과도한 것처럼 보이고 역 삼각형을 사용하지 않고도 답변을 볼 수 없습니다. 좀 더 우아한 해결책을 찾고 있어요.

미리 감사드립니다. :)

+0

참고 : 정답은 'u = (q1 * q2^-1) * v'라고 생각합니다. 여기서 ux, uy는'un '의 지점이고 uz는 vx, vy, 0에서 ux까지의 거리입니다 , uy, 0. 나는 이것을 검증해야한다. 내가 틀렸다면 나에게 정정해라! – Nolo

답변

1

다음과 같은 값을 가지고 : 당신이 의심으로

vx, vy, vz; //These are the points in the viewing plane, which you know. 
q1, q2;  //The vectors describing the viewing and scene planes. 

은 평면 사이의 투영 트릭은 상대적 방향을 사용하여입니다.

평면 사이에서 상대적인 방향을 찾을 때 오프셋을 사용하여 장면 평면을 정면 평면 (뷰 평면)에서 오프셋 된 것처럼 처리해야합니다. 이것은 시각화하는 것이 더 쉽지만, 더 관련성이 높은 답을 찾게됩니다. 이것을 아는

다음 식에 N을 정의하는 상대적인 배향을 사용할 수

q_proj = q - dot(q - p, n) * n 

점 (P)에 의해 소정의 평면 상 점 Q = (x, y, z)의 투영 = (a, b, c) 및 법선 n = (d, e, f)로 나타낼 수있다.

이 답변은 여기에서 찢어졌습니다 (How do I find the orthogonal projection of a point onto a plane).

+0

예, 조금 생각한 후 깨달았습니다. : D 내 쿼터니언 구현은'q1 (q2^-1) -> qt'를 계산 한 후 이미 z 모자 ('n')를 포함하고있는 행렬 표현을 제공합니다. 그러면 간단히'qt (p) -> p'' 'nz * t - p'.z = 0'을 풀고,'q2 (p '+ (n) t) -> p'''를 풀어 장면의 평면에서 그 점의 공간 좌표를 얻는다. – Nolo

관련 문제