프로그래밍 공부
작성일
2023. 11. 9. 17:45
작성자
WDmil
728x90

 

평면방정식은 3차원 공간에서 평면을 표현하였을 때. 각 점끼리의 상호작용에 의해 어떠한 결과가 유도되는.

 

관계를 의미한다.

 

짧게 설명하자면.

어떠한 점 n개(3개이상)으로 이루어진 평면 내에 어떠한 점 한개가 위치할 때.

 

해당점 P(x, y, z)는 Ax + By + Cz - D = 0을 만족한다.

 를 이야기한다.

 

여기서 A와 B와 C는 법선벡터를 의미한다.

예를들어 법선벡터가 (1,0,0)이라면, x축에 수직인 평면을 의미한다.

 

D는 평면이 원점으로부터 얼마나 떨어져있는가를 나타내난 값 이다.

 

이러한 값들을 활용해서 다양한 정보를 얻어낼 수 있는데,

 

예를들어 3D월드상에서 vertex와 면 두개가 접촉하였다고 가정해보자.

 

여기서 우리가 접촉시킨 물체가 구체이고. 접촉점의 높이를 알고싶다고 해보자. 그러면 다음과같이 알아낼 수 있다.

 

다음과 같은 정보가 주어졌다고 생각해보자.

우리는 법선 ABC의 정보를 알지 못하고, 접촉점의 임의의위치 xyz를 알아야 한다고 가정해보자.

접촉점은, 원점으로부터 반지름만큼. 일정 각도로 이동했다고 볼 수 있다.

 

수식을 정리해보자.

 

우선 법선을 구해보자.

 

x(x1y1z1), y(x2y2z2), z(x3y3z3)의 삼각형 평면의 3점이 존재한다고 할 때.

 

해당 3점에서 위로 향하는 법선벡터를 구할 수 있다.

 

외적은, 두 벡터가 이루는 평면에 수직인 벡터를 생성하기 때문에

x->z , x->y  이 두벡터를 외적하면 법선벡터를 구할 수 있을것이다.

x->z = z - x = (x3 - x1, y3 - y1, z3 - z1);

x->y = y - x = (x2 - x1, y2 - y1, z2 - z1);

 

이 두개를 다음과 같이 정의해보자.

 

x->z = u = (u1, u2, u3)

x->y = v = (v1, v2, v3)

 

이걸 이제 외적으로 정리하면.

 

(u2v3 - u3v2, u3v1 - u1v3, u1v2 - u2v1)

즉, 법선벡터 = (u2v3 - u3v2, u3v1 - u1v3, u1v2 - u2v1)

이 된다.

 

우리는 법선벡터를 구했다. 그럼으로 해당 원점에서 접촉점으로 향하는 벡터도 구할 수 있다!

 

접촉점으로 향하는 벡터를 구해보자.

 

우리가 구해야하는 값은. 법선과 구체의 중심점에대한 각도차이를 구해야한다.

 

대강 요렇게 그려질것이다.

 

여기서 우리는 저 면의 중앙까지의 각도가 90도라는것을 알 수 있다.

 

왜냐하면 법선은 면에대한 수직선이기 때문이다.

이러한 cos각도를 생각했을 때. 우리는 저걸 옆에서 수직으로 바라보았을때 다음과 같이 볼 수 있다.

밑의 파란선이 잘 보이지는 않지만. 저게 원점에서 수직으로 내려온 선분이 있다고 가정했을 때 임의로 그은 선이라고 생각하자.

 

구체의 성질은 접촉시 항상 점으로 접촉한다는 것 이고.

 

원점과 수직한다는것이다.

 

원점과 수직한 vertice는 항상 반지름과의 거리차가 있다.

 

중점에서 수직으로 vertice만큼 내린 거리차이와 실제 접촉점과의 차이가 있을것이다.

 

여기서 우리는 법선각도로 중점을 반지름까지 내려주면 접촉점을 구할 수 있다.

 

Ax + By + Cz - D = 0를 만족한다고 하였을 때.

 

D를 찾아낼 수 있다.

 

즉,

 

Ax + By + Cz = 구체일경우 반지름

 

을 알 수 있다.

 

여기서 A와 B, C는 법선벡터임으로.

 

y값을 구하고싶다면 다음과같이 수식을 수정할 수 있다.

 

By = -Ax -Cz + D

 

위와같이 접촉점에 대한 vertice위치를 구할 수 있다.

728x90

'컴퓨터 용어 정리 > 게임 수학' 카테고리의 다른 글

Slab method  (0) 2023.11.06
OBB  (0) 2023.11.06
AABB  (0) 2023.11.06
DirectX3D 벡터의 외적  (0) 2023.10.22
DIrectX3D 벡터의 내적(Dot Product)  (0) 2023.10.22