2009-09-03 9 views
1

3D 공간에서 두 세트의 점에 관한 질문이 있습니다. 하나의 직교 좌표계에서 40 개의 좌표로 볼륨을 정의했습니다. 다른 좌표계에서 다른 (0,0,0) i는 40 개의 좌표로 정의 된 약간 다른 볼륨을가집니다. 포인트 세트의 일치하는 쌍을 알고 각 점 쌍 (유클리드 거리)의 차이를 측정하고 싶습니다. 1) 두 좌표계 (같은 축척)를 서로 어떻게 참조 할 수 있습니까? 2) 두 볼륨을 모두 등록하도록 변환을 계산하는 것이 가장 좋은 방법은 무엇입니까?두 세트의 3d 점

도움 주셔서 감사합니다.

답변

1

삼각형을 정의하는 세 개의 공통점을 사용하는 경우 표면 법선 간의 각도 차이를 비교하여 하나를 다른 것으로 바꾸는 회전 변환을 결정할 수 있습니다. 크기의 차이로부터 규모를 얻습니다. 일단이 두 가지가 있으면 번역이 그 차이에서 벗어납니다.

A와 B의 한 쪽 모서리를 원점에 두어 AOrigin과 BOrigin을 만듭니다. 당신은 빼기 정의하여이 작업을 수행 A [0]에서 각각 [0]을 통해 [2], B와 동일한 기능을 수행 할 예 : 다음

AOrigin[1] = A[1] - A[0] // this is vector math - you have to subtract each coordinate individually 
AOrigin[2] = A[2] - A[0] 
AOrigin[0] = <0 0 0> 

BOrigin[1] = B[1] - B[0] 
BOrigin[2] = B[2] - B[0] 
BOrigin[0] = <0 0 0> 

당신은 단위 법선, ANormal 및 B 일반

를 얻을 수 무엇을 축으로하는 약이 회전이다

acos(ANormal . BNormal) 

질문은 :

ANormal = AOrigin[1] x AOrigin[2] 
ANormal = ANormal/|ANormal| 
BNormal = BOrigin[1] x BOrigin[2] 
BNormal = BNormal/|BNormal| 

그런 다음 당신은 그들 사이의 각도가 발견? 당신은 ANormal과 BNormal의 교차 곱을 취함으로써 그것을 발견 할 수 있습니다. 이제는 A 축을 B 축과 같은 회전 방향으로 변환하는 단일 축에 대해 단일 회전을 제공합니다.

다음 트릭은 A와 B가 동일한 축척을 갖도록하는 것이고 두 점을 취하면됩니다 A와 B에서 각각의 길이를 구한 다음 그 비율을 구하십시오. 그것이 규모입니다.

어디로가는 지 확인하십시오. 이 모든 수학은 괜찮은 Calculus 책에있을 것입니다.

+0

어떻게 계산할 수 있습니까? 예. 예를 들어, 포닛 세트 A 1 (87,159,28) 2 (-97,216,15) 3 (60,237,9) 및 포인트 세트 B 1 '(96,6,35) 2'(-86,62,23) 3 ' (71,82,14). 이것은 두 시스템의 해당 좌표 쌍입니다. –

1

질문의 첫 번째 부분을 잘 모르겠지만 한 세트의 점을 다른 점으로 옮기는 변환을 원한다면 이해할 수있는 간단한 방법이 있습니다. 내가 말한 포인트 세트 A {1 (87,159,28) 2 (-97,216,15) 3 (60,237,9)}와 B {1 '(96,6,35) 2'(-86,62 , 23) 3` (71,82,14)}.

은 내가

 
(87,159,28) (-97,216,15) (60,237,9) 

시작 원점에 점 하나를 가지고 번역 :

 
(0,0,0) (-184,57,-13) (-27,78,-19) 

가 그럼 난 XZ 평면에 점 2를 가져 z 축을 중심으로 회전 : Y 축에 대한 후

 
(0,0,0) (-192.6,0,-13) (-48.9,66.5,-19) 

은 z 축에 2 점을 가지고 :,745

순서대로 촬영

 
(0,0,0) (0,0,193.1) (-68.3,0,50.0) 

이 단계를 새로운 공간으로 공간 A로부터 물건을 운반, C. 호출 : 다시 z 축에 대한 마지막

 
(0,0,0) (0,0,193.1) (-15.7,66.5,50.0) 

는 XZ 평면에 점 3을 가지고 이 변환을 Tca라고 부르세요. 이 단계들은 뒤집을 수 있습니다 - 역변환 Tac을 호출하십시오. 이제 Tcb와 Tbc를 얻으려면 B와 동일하게하십시오. 두 세트의 점은 모두 C 인 경우 일치합니다. 이제 집합 A를 B로 설정하려면 Tca를 적용한 다음 Tbc를 적용하십시오. B 세트에서 A 세트로 가려면 Tcb를 누른 다음 Tac을 적용하십시오.

2

일치하는 쌍을 알고 있으면 의사 역 (Matlab의 pinv() 또는 numpy)을 사용하여 매우 간결하게 해결할 수 있습니다.

  1. 는 크기 3x40의, 두 개의 배열로 & B를 포인트를 넣습니다.
  2. 각각의 하단에 1의 행을 추가하십시오. 따라서 크기는 4x40입니다.
  3. B를 A 변환(변환 포함)로 변환하는 4x4 행렬은 A * pinv (B)입니다.

(대부분) 일반 위치에서 40 포인트를 사용하면 임의의 비율, 회전 또는 원근감 변환을 처리 할 수도 있습니다.

관련 문제