이전글에서 벡터의 내적과 외적을 이용해서 직선 삼각형 교차점을 계산했었습니다.
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
'3D Algorithm' 카테고리의 다른 글
CCW 정렬 알고리즘 (0) | 2024.04.23 |
---|---|
내적을 이용한 특징점 계산 (0) | 2024.04.09 |
직선 삼각형 교차점 계산(Ray Triangle Intersection) (0) | 2024.03.21 |
벡터 내적 외적 계산 공식과 결과 의미 (0) | 2024.03.12 |
사이각 벡터 계산 (0) | 2024.03.08 |