2016-06-02 2 views
0

두 개의 3D 점으로 정의 된 두 개의 선이 있습니다 (이 점은 고정 값입니다). 3D 공간에서 교차점을 찾을 때까지이 선들을 "스트레치"하는 가장 쉬운 방법임을 알고 싶습니다.matlab에서 두 줄의 교차점 찾기

이것은 Matlab을 사용하여 카메라의 초점을 찾는 맥락입니다.

+3

두 줄이 3D에서 교차하지 않을 수도 있습니다. 아마 당신은 처음에 어떤 비행기 나 다른 비행기로 그들의 투영을 찾았습니까? –

+0

@MadPhysicist가 말했듯이, 교차하는 것은 보장되지 않습니다. 당신은 두 사람 사이의 최단 거리를 찾고 중간 지점을 잡기를 원할 것입니다. Paul Bourke는이 작업을 수행하는 방법에 대한 훌륭한 글을 남겼습니다. http://paulbourke.net/geometry/pointlineplane/ 여기에 MATLAB 구현이 있습니다. http://paulbourke.net/geometry/pointlineplane/lineelineintersect.m – Suever

답변

1

코멘트 작성자가 언급했듯이 해결책이 될지는 없습니다. 그러나 솔루션이 존재하는지 여부와 존재하는 경우 솔루션을 체계적으로 결정할 수 있습니다. 대부분 pseudo-code로 메소드를 스케치 할 것입니다 :

각 라인을 포인트와 방향에 대한 정규화 된 단위 벡터로 표현하는 것이 가장 쉽습니다. 다음과 같이 주어진다는 점 A1, B1의 A 및 라인 B의 B2에 A2는이를 수행 할 수

pA = A1, uA = (A2-A1)/norm(A2-A1). 
pB = B1, uB = (B2-B1)/norm(B2-B1). 

참고 norm(uA) = 1norm(uB) = 1있다.

이어서 선 A를 따라 포인트가 표현 될 수있는 바와 같이 :

pA + cA * uA 

과 라인 B를 따라 포인트로 표현 될 수있다 :

pB + cB * uB 
문제는 다음 찾는 계수 cAcB 예 중 하나가

그 라인이 일치하는지 또는

pA + cA * uA = pB + cB * uB 

이를 해결하기 위해 몇 가지 단순화 된 변환을 할 수 있습니다. 먼저 그룹에서 다른 한쪽 pApB 용어 및 uAuB 및 조건 :

cA * uA - cB*uB = pB - pA = vp 
vp = pB-pA

. dot(x,y)이 벡터 xy의 내적이 어디

cA - cB*dot(uA,uB) = dot(uA,vp) 
cA*dot(uA,uB) - cB = dot(uB,vp) 

을, 우리는 내적 dot(uA,uA) = norm(uA)^2 = 1dot(uB,uB) = norm(uB)^2 = 1을 단순화했습니다 : 그런 다음, uAuB 모두 각면의 내적을.

이 두 미지수 함께 두 스칼라 식을 제공하고, 매트릭스 식에 상당 :

C = [ 1, -dot(uA,uB) ; dot(uA,uB), -1 ] \ [ dot(uA,vp) ; dot(uB,vp) ] 

: 당신은 백 교체 연산자 \를 사용 매트랩 이것을 해결

[ 1, -dot(uA,uB) ; dot(uA,uB), -1 ] * C = [ dot(uA,vp) ; dot(uB,vp) ] 

세 가지 가능성이 있습니다 :

  1. 행렬 방정식이 존재하는데, 이는 행을 나타냅니다. 이 솔루션은 교차점에 대해 cAcB의 값을 제공합니다.

  2. 벡터 uAuB은 동일합니다.따라서 선은 평행하고 일치하거나 (pA == pB) 교차하지 않습니다.

  3. 벡터 uAuB은 다르지만 해결책이 존재하지 않습니다. 선들은 비스듬하고 교차하지 않을 것입니다.