평면방정식은 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위치를 구할 수 있다.
'컴퓨터 용어 정리 > 게임 수학' 카테고리의 다른 글
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 |