3차원에서 두 직선 교차점을 찾는 방법 2가지를 소개하겠습니다.
1. 첫 번째 행렬식을 이용한 교차점 계산입니다.
점 4개 p1, p2, p3, p4가 있고 직선의 두 벡터 d1(p2-p1), d2(p4-p3)가 있을 때(두 벡터는 길이 1로 정규화)
직선 1 : p1+td1
직선 2: p3+sd2
로 볼 수 있으며, 교차점 있다는 것은
p1+td1 = p3+sd2
이 식으로 표현이 가능합니다. 이때 t와 s를 구하면 됩니다.
직선 식 참고는 아래글에서 확인하세요.
2024.04.24 - [3D Algorithm] - 3차원 직선 계산 및 벡터 표현(개발자 관점)
x, y, z로 분리해서 식을 만들면
p1x + td1x = p3x + sd2x
p1y + td1y = p3y + sd2y
p1z + td1z = p3z + sd2z
t, s 미지수를 ax=b 형태로 만들면 아래와 같이 행렬식이 됩니다.
(d1x -d2x) ( t ) = (p3x-p1x)
(d1y -d2y) ( s ) = (p3y-p1y)
(d1z -d2z) ( ) = (p3z-p1z)
이 행렬식을 풀어 t, s를 구해 교차점을 구하면 됩니다.
eigen library 이용해서 t, s를 구하는 건 아래글을 참고하세요.
2023.11.28 - [3D Algorithm] - 세 점을 지나는 원 중심 계산(Eigen Library 이용한 최소자승법)
2. 두 번째 벡터 내적과 외적을 이용한 교차점 계산입니다.
벡터 외적은 두 벡터로 이루어진 평행사변형의 면적과 관련이 있다고 했습니다. 아래글은 벡터 외적을 이용해서 삼각형의 면적을 구하는 글입니다.
2023.12.26 - [3D Algorithm] - 3차원 삼각형 면적 계산 5가지 방법(좌표, 길이, 각도, 외적 이용)
같은 벡터를 외적 하면 면적이 0이기 때문에 외적이 0으로 계산됩니다. 이걸 이용해서 아래식이 유도가 됩니다.
위 식에서 구해지는 s 혹은 t를 이용해서 교차점을 계산하면 됩니다.
s의 분모 ||d1 X d2||^2가 0이면 두 직선은 교차점 없이 평행하다고 봐야 합니다.
참고 url: https://www.realtimerendering.com/intersections.html#I304
'3D Algorithm' 카테고리의 다른 글
3차원 회전 (0) | 2024.09.13 |
---|---|
벡터 계산과 단위벡터 (0) | 2024.09.11 |
Morton Code (0) | 2024.09.04 |
CAD Revolve (1) | 2024.09.03 |
AABB(Axis Aligned Bounding Box) 계산과 활용 (0) | 2024.08.22 |