본문 바로가기
3D Algorithm

선형 방정식을 이용한 직선 삼각형 교차점 계산

by DarkRock 2024. 4. 2.
반응형

이전글에서 벡터의 내적과 외적을 이용해서 직선 삼각형 교차점을 계산했었습니다. 

2024.03.21 - [3D Algorithm] - 직선 삼각형 교차점 계산(Ray Triangle Intersection)

 

직선 삼각형 교차점 계산(Ray Triangle Intersection)

tn: triangle normal rd: ray direction p: hit point ro: ray origin v0, v1, v2: triangle vertex 위 그림에서 ray origin으로부터 ray direction의 최단거리 t는 t = ((v0 - ro) • tn) / (rd • tn) •는 내적 로 구할 수 있습니다. t가

darkrock.tistory.com

 

이번글에서는 선형방정식을 이용해서 직선 삼각형 교차점을 계산하는 방법을 보도록 하겠습니다.

삼각형 꼭지점 abc, 직선의 한 점 p, 직선의 방향 dir인 아래 그림을 예로 들겠습니다.


직선 위의 한 점은 이전글에서 거리 t와 벡터에 의해 식을 세울 수 있었습니다.

2023.10.26 - [3D Algorithm] - 3차원 직선 계산 표현(개발자 관점)

 

3차원 직선 계산 표현(개발자 관점)

어렸을 때 배웠던 2차원 직선의 방정식은 y = ax+b 선언하여, 두 점을 이 식에 대입한 후 미지수 a, b를 구하여 직선의 방정식을 구했습니다. 3차원에서 직선은 다음과 같이 3가지로 표현할 수 있습

darkrock.tistory.com

직선 위의 점 = p + t*dir

삼각형 위의 한 점은 삼각형 꼭지점 abc에 의해 다음과 같이 식을 세울 수 있습니다.
삼각형 위의 점 = a + u*ab + v*ac
여기서 u, v는 0보다 크며 u+v은 1 이하여야 합니다.

위의 두 식을 합치면 다음과 같이 됩니다.
p + t*dir = a + u*ab + v*ac
좌변을 t, u, v 관한 식으로 보내면 다음과 같습니다.
t*dir - u*ab - v*ac = a - p

이식을 3차원 일 때 x, y, z에 관해서 행렬의 선형 방정식으로 만들면 다음과 같습니다.
(dir -ab -ac) (t) = a-p   //x좌표    
(dir -ab -ac) (u) = a-p  //y좌표    
(dir -ab -ac) (v) = a-p  //z좌표   

이 선형 방정식을 풀면 t, u, v가 나오는데 u, v가 0보다 크며 u+v이 1 이하일 때 p +t*dir은 삼각형 안에 있는 점이 됩니다. C++ Eigen Library 이용해서 선형 방정식을 계산하는 코드는 아래 글에서 소개했었습니다.

2023.11.28 - [3D Algorithm] - 세 점을 지나는 원 중심 계산(Eigen Library 이용한 최소자승법)

 

세 점을 지나는 원 중심 계산(Eigen Library 이용한 최소자승법)

2차원에서 세 점을 지나는 원의 중심을 Eigen 라이브러리를 이용해서 구하는 방법을 알려드리겠습니다. 우리가 일반적으로 알고 있는 원의 방정식은 (x-a)^2 + (y-b)^2 = r^2 이며, 이 식은 표준형이라

darkrock.tistory.com

 

반응형