벡터 외적을 이용한 직선의 교점 구하기

수학 이야기 2020. 9. 10. 09:31

2D 평면에서 네 점 p1, p2, p3, p4가 주어졌을 때, 두 직선 p1p2, p3p4의 교점을 벡터의 외적(cross product)를 이용하여 구하는 방법입니다.

 

영상 기하학을 공부하는 사람들이라면 기본적으로 배우는 것으로 압니다만 (스스로는 정리가 안되어서) 이번 기회에 정리해 놓고 참조하려고 합니다.

 

[방법]

먼저, 네 점을 homogeneous 좌표로 변환하고 3D 벡터로 해석

직선1: $p_1 = (x_1, y_1, 1)$, $p_2 = (x_2, y_2, 1)$

직선2: $p_3 = (x_3, y_3, 1)$, $p_4 = (x_4, y_4, 1)$

 

벡터의 외적을 이용하여 $v$를 계산

$v = (p_1 \times p_2) \times (p_3 \times p_4)$

 

계산된 결과가 $v = (x, y, w)$라면 두 직선의 교점의 좌표는 $(x/w, y/w)$로 주어짐

 

[원리]

2D 평면은 3차원 공간에서의 투영면(image plane), 각각의 점(pi)은 3차원 공간의 projection ray가 투영면에 투영된 점으로 생각할 수 있다. 그리고 투영의 기준점(projection reference point)을 3차원 좌표계의 원점(카메라 원점 C)으로 생각할 수 있다.

 

이 때, 두 벡터 $p_1$, $p_2$의 외적 $n_1 = p_1 \times p_2$는 두 벡터에 의해 정의되는 평면에 수직인 벡터이다 (즉, p1, p2, C를 지나는 평면의 normal 벡터). 마찬가지로 $n_2 = p_3 \times p_4$은 평면 p3, p4, C의 수직 벡터이다. 이 때, 두 평면의 교선 벡터는 $v = n_1 \times n_2$로 주어진다 (두 평면의 수직 벡터에 동시에 수직인 벡터). 두 평면은 모두 투영의 원점(C)을 지나며 또한 원래의 두 직선 p1p2, p3p4의 교점을 지난다. 즉, 투영의 원점과 두 직선의 교점을 잊는 ray가 교선 벡터($v$)가 된다. 따라서, 교선 벡터를 확장한 ray가 원래의 투영면(이미지 평면)과 만나는 점이 구하고자 하는 두 직선의 교점이 된다. 그리고 그 값은 $v$를 유클리디언 좌표로 변환하면 얻어진다.

 

☞ 관련 원리는 벡터의 외적 및 homogeneous 좌표에 대한 이해가 필요하며, [영상처리] - [영상 Geometry #2] Homogeneous Coordinates 글 참조하기 바랍니다.

 

by 다크 프로그래머

'수학 이야기' 카테고리의 다른 글

상관계수와 cross correlation  (3) 2021.09.12
벡터 외적을 이용한 직선의 교점 구하기  (0) 2020.09.10
구구단 암산법  (4) 2018.10.08
아이와 수학 공부하기  (5) 2017.11.15