두 개의 3D 점으로 정의 된 두 개의 선이 있습니다 (이 점은 고정 값입니다). 3D 공간에서 교차점을 찾을 때까지이 선들을 "스트레치"하는 가장 쉬운 방법임을 알고 싶습니다.matlab에서 두 줄의 교차점 찾기
이것은 Matlab을 사용하여 카메라의 초점을 찾는 맥락입니다.
두 개의 3D 점으로 정의 된 두 개의 선이 있습니다 (이 점은 고정 값입니다). 3D 공간에서 교차점을 찾을 때까지이 선들을 "스트레치"하는 가장 쉬운 방법임을 알고 싶습니다.matlab에서 두 줄의 교차점 찾기
이것은 Matlab을 사용하여 카메라의 초점을 찾는 맥락입니다.
코멘트 작성자가 언급했듯이 해결책이 될지는 없습니다. 그러나 솔루션이 존재하는지 여부와 존재하는 경우 솔루션을 체계적으로 결정할 수 있습니다. 대부분 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) = 1
및 norm(uB) = 1
있다.
이어서 선 A를 따라 포인트가 표현 될 수있는 바와 같이 :
pA + cA * uA
과 라인 B를 따라 포인트로 표현 될 수있다 :
pB + cB * uB
문제는 다음 찾는 계수
cA
및
cB
예 중 하나가
그 라인이 일치하는지 또는
pA + cA * uA = pB + cB * uB
이를 해결하기 위해 몇 가지 단순화 된 변환을 할 수 있습니다. 먼저 그룹에서 다른 한쪽 pA
와 pB
용어 및 uA
uB
및 조건 :
cA * uA - cB*uB = pB - pA = vp
vp = pB-pA
. dot(x,y)
이 벡터 x
및 y
의 내적이 어디
cA - cB*dot(uA,uB) = dot(uA,vp)
cA*dot(uA,uB) - cB = dot(uB,vp)
을, 우리는 내적 dot(uA,uA) = norm(uA)^2 = 1
및 dot(uB,uB) = norm(uB)^2 = 1
을 단순화했습니다 : 그런 다음, uA
및 uB
모두 각면의 내적을.
이 두 미지수 함께 두 스칼라 식을 제공하고, 매트릭스 식에 상당 :
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) ]
세 가지 가능성이 있습니다 :
행렬 방정식이 존재하는데, 이는 행을 나타냅니다. 이 솔루션은 교차점에 대해 cA
및 cB
의 값을 제공합니다.
벡터 uA
및 uB
은 동일합니다.따라서 선은 평행하고 일치하거나 (pA == pB
) 교차하지 않습니다.
벡터 uA
및 uB
은 다르지만 해결책이 존재하지 않습니다. 선들은 비스듬하고 교차하지 않을 것입니다.
두 줄이 3D에서 교차하지 않을 수도 있습니다. 아마 당신은 처음에 어떤 비행기 나 다른 비행기로 그들의 투영을 찾았습니까? –
@MadPhysicist가 말했듯이, 교차하는 것은 보장되지 않습니다. 당신은 두 사람 사이의 최단 거리를 찾고 중간 지점을 잡기를 원할 것입니다. Paul Bourke는이 작업을 수행하는 방법에 대한 훌륭한 글을 남겼습니다. http://paulbourke.net/geometry/pointlineplane/ 여기에 MATLAB 구현이 있습니다. http://paulbourke.net/geometry/pointlineplane/lineelineintersect.m – Suever