2016-08-02 14 views
0

현재 과학 논문에 이어 3D 포인트 클라우드 필터링 알고리즘을 구현 중입니다.회전 행렬, 정규화, 행렬식 -1

특정 값에 대한 회전 행렬을 계산할 때 몇 가지 문제가 있습니다. 목표는 법선 벡터 (Z 축)의 방향으로 정의 된 좌표계로 점을 회전시키는 것입니다. 다음 쿼리는 X 축, Y 축에서 회전 대칭이므로이 축의 방향은 중요하지 않습니다. 다음 R이 정의된다 Rotationmatrix

[1  1 -(nx+ny)/nz] 
R = [ (row1 x row3)'  ] 
    [nx  ny  nz ] 

N은 정규화된다. 문제는 n_z가 실제로 작거나 0이 될 때 발생합니다. 따라서 행 2의 교차 제품을 계산하기 전에 행 1을 정규화하는 것으로 간주했습니다.

그럼에도 불구하고 행렬식은 -1이됩니다. 로테이션 매트 실이 정확한 결과를 이끌어 낼 것입니까? R은 직각이지만 det | R | +1하지 않음

제안에 감사드립니다.

답변

1

당신은 항상

det(a, a×b, b) = - det(a, b, a×b) 
= - dot(a×b, a×b) 

항상 부정적인 것을 얻을. 따라서 두 번째 행을 무효화하거나 행의 전체 순서를 다시 정렬하여 두 번째 행을 변경해야합니다.

+0

thx, 그 신문에 따라 반사 매트릭스를 얻을 것을 알게되었습니다. z 축의 방향은 중요하지 않으므로 결과에 영향을 미치지 않습니다. – andysfd

+0

다른 사람들의 이익을 위해, 많은 경우에 * 의도적이지 않을 때 반영을 포함하는 변형을 사용하는 것이 문제가됩니다. 의도적이지 않다면, 나는 오른손 좌표를 보존하기 위해 벡터 중 하나를 부인합니다. – sage

0

임의의 축을 중심으로 회전하는 데 관심이 있으십니까? 그렇다면 quaternions이 좋은 해결책 일 수 있습니다. 실제로 사용하기 전에 쿼터니언을 행렬로 변환하려면 this을 확인할 수 있습니다.