1. 유클리드 기하학(Euclidean Geometry)
유클리드 기하학은 일반적으로 우리가 가장 익숙한 기하학으로, 주로 평면이나 3D 공간에서 거리, 각도 등을 계산하는데 사용된다. 벡터와 점을 기반으로 여러 기하학적 특성을 계산할 수 있다.
1. 거리 계산(Distance Calculation)
두 점 사이의 거리를 계산하는 공식은 피타고라스 정리를 기반으로 한다. 두 점 P1(x1, y1)와 P2(x2, y2) 사이의 유클리드 거리는 다음과 같다.
2D
3D
2. 각도 계산(Angle Calculation)
두 벡터 사이의 각도를 계산하는 데 주로 사용되는 공식은 내적(Dot Product)을 사용한다. 두 벡터 A(Ax, Ay, Az)와
B(Bx, By, Bz) 사이의 각도 θ는 다음과 같이 계산한다.
여기서 A*B 는 내적을 나타내며 |A|와 |B|는 벡터의 크기이다.
2. 벡터 기하학(Vector Geometry)
벡터 기하학은 주로 점, 선, 평면 등을 벡터와 연산을 통해 설명한다.
1. 점-선 거리(Point-to-Line Distance)
점 P(x0, y0, z0)와 선 L : r(t) = A + tB (여기서 A는 선상의 한 점, B는 선의 방향 벡터) 사이의 거리는 다음과 같이 계산된다.
여기서 X 는 벡터의 외적을 의미한다.
2D의 경우 외적 대신 벡터의 길이를 구하는 방식으로 계산이 가능하다.
2D직선에서 점 P와 직선 L 사이의 거리는 다음과 같이 구할 수 있다.
1. 직선의 방정식은 Ax + By + C = 0 형태로 나타내며
점 P(x1,y1)와 직선 Ax + By + C = 0 사이의 거리는 다음 공식으로 구할 수 있다.
A, B, C는 직선의 방정식 계수
x1, y1는 점 P의 좌표
3D일때 직선과 점 사이의 거리
3D직선의 경우도 비슷한 방식으로 점과 직선 사이의 거리를 구할 수 있다.
3D 직선의 방정식은 다음과 같이 표현할 수 있다
A는 직선 위의 점
d는 직선의 방향 벡터
t는 파라미터
점 P와 직선 L 사이의 거리는 다음과 같이 계산할 수 있다.
여기서 P - A는 점 P와 직선 위의 점 A 사이의 벡터이며
X 는 벡터의 외적
|d| 벡터의 크기(길이)
2D 직선과 점 사이의 거리는 직선 방정식에서 계수를 이용해 계산하고, 외적 없이 직접적으로 점과 직선의 거리를 구할수 있다.
3D 직선과 점 사이의 거리를 외적을 사용하여 점에서 직선까지의 수직 거리를 구할 수 있다.
기하학적 계산은 게임 개발에서 충돌 감지, AI의 경로 탐색, 물리 엔진 등에서 유용하게 사용될 수 있다.
복습 해보는 외적 계산 방법
두 벡터 A = (Ax, Ay, Az)와 B = (Bx, By, Bz)에 대해, 외적은 다음과 같이 계산된다.
다음과 같은 공식으로 나타난다 ((Ay * Bz - Az * By), (Az * Bz - Az * Bz), (Az * By - Ay * Bx))
2. 평면 방정식(Plane Equation)
3D 공간에서 평면은 다음과 같은 방정식으로 나타낼 수 있다.
여기서 (A,B,C)는 평면의 법선 벡터를 나타내며, D는 평면과 원점을 연결하는 거리를 나타낸다.
평면 방정식은 벡터 연산을 사용하여 구할 수 있다. 예를 들어, 평면 위의 세 점 P1, P2, P3가 주어지면,
두 벡터 v1 = P2 - P1, v2 = P3 - P1를 사용하여 평면의 법선 벡터 n을 계산하고, 이를 평면 방정식에 적용한다.
해당 방정식은 평면을 정의하는데 필요한 정보를 제공하며, 법선 벡터는 평면을 정의하는 중요한 요소로, 평면에 수직인 벡터이다.
주어진 정보
- 평면 위의 한 점 P(x0, y0, z0)
- 평면에 수직인 법선 벡터 n = (A,B,C)
예시 평면 위의 점 P(1,2,3)와 법선 벡터 n = (4, -5, 6)으로 주어졌을 때, 평면 방정식을 구해보자
A = 4, B = -5, C = 6, x0 = 1, y0 = 2, z0 = 3이므로
D = -(4 * 1 + (-5) * 2 + 6 * 3) = -(4 - 10 + 18) = -12 로
평면 방정식은 4x -5y + 6z - 12 = 0 이다.
1. 두 점과 법선 벡터를 이용한 평면 방정식 구하기
두 점이 주어졌을 때, 그 두 점과 법선 벡터를 이용하면 평면 방정식을 구할 수 있다.
주어진 두점을 통해 벡터를 구하고, 그 벡터들고 법선 벡터를 구한 뒤 평면 방정식을 유도하면 된다.
2. 점과 평면 사이의 거리 계산
주어진 점이 평면 위에 있지 않다면, 그 점과 평면 사이의 수직 거리를 계산할 수 있다. 점과 평면 사이의 거리는 다음 공식을 사용한다.
여기서 (x1,y1,z1)는 점의 좌표, A,B,C는 평면 방정식의 계수, D는 평면 방정식의 상수항이다.
예를들어 평면 방정식이 3x - 4y + 5z - 6 = 0과 점 P(1,2,3)이 주어졌을 때, 점과 평면 사이의 거리를 구해보자
공식을 사용하여 풀어보면 점과 평면 사이의 거리는 약 0.566이라는 것을 알 수있다.
평면방정식은 법선 벡터와 평면 위의 점을 이용해 정의할 수 있다.
해당 방정식을 사용하면 평면을 정의하고, 점과 평면 사이의 거리도 구할 수 있어 게임 개발에서는
충돌 감지, AI 경로 탐색 등에서 활용할 수 있다.
3. 법선 벡터와 점을 이용한 평면 방정식 구하기
평면의 방정식을 구할 때, 법선 벡터와 평면 위의 한 점이 주어지면, 평면 방정식을 유도할 수 있다.
- 법선 벡터(Normal Vector)란 어떤 평면, 곡면 또는 곡선에 수직인 벡터를 의미한다. 법선 벡터는 해당 객체에 대해
수직인 방향을 정의하며, 물리학, 컴퓨터 그래픽스, 게임 개발 등에서 중요한 역할을 한다.
법선 벡터의 개념
- 평면에서의 법선 벡터는 평면에 수직인 벡터다. 즉, 평면 위의 모든 점과 그 평면을 가로지르는 직선들은 법선 벡터와 직각을 이루게 된다.
- 3D 그래픽스나 물리학에서, 법선 벡터는 반사, 조명 계산, 충돌 처리 등에 사용된다.
예를 들어 빛이 물체에 부딪히면 법선 벡터를 이용해 반사 각도를 계산할 수 있다.
법선 벡터와 평면의 관계
- 평면 위의 모든 점은 법선 벡터와 수직인 방향에 놓인다.
- 평면의 방정식에서 A,B,C는 법선 벡터의 각 성분으로, 평면의 기울기와 방향을 정의한다.
법선 벡터는 두 벡터의 외적을 사용해서 구할 수 있다.
두 벡터가 주어졌을 때, 외적을 구하면 두 벡터에 수직인 벡터를 찾을 수 있다.
외적은 3D 벡터에서만 정의되므로, 두 3D 벡터가 주어졌을 때 법선 벡터를 계산할 수 있다.
두 점 P1(x1, y1, z1)과 P2(x2, y2, z2)이 주어졌을 때, 이 두점을 잇는 벡터들을 만들고 그 벡터들의 외적을 계산하면 평면에 수직인 법선 벡터를 구할 수 있다.
1. 두 벡터 구하기
- 벡터 v1 = (x2 - x1, y2 - y1, z2 - z1)
- 벡터 v2는 다른 벡터를 선택하여 계산 가능 (예 : 평면 위의 또 다른 점에서 구한 벡터)
두 벡터의 외적을 계산하면 법선 벡터 n을 얻을 수 있다.
법선 벡터 구하기 예시
1. 평면 방정식 이용
평면 방정식이 3x - 4y + 5z - 6 = 0 인 경우, 법선 벡터 n = (3, -4, 5)가 평면에 수직인 벡터이다.
2. 두 벡터의 외적 이용
A = (1,2,3) B = (4, -5, 6)가 있을 때, 이 벡터들의 외적을 계산해보자
A B 외적 = (27, 6, -13)이 나온다.
3. 충돌 판정(Collision Detection)
충돌 판정은 게임, 물리 엔진 등에서 객체 간의 충돌 여부를 판단하는 데 사용된다.
1. AABB(Axis-Aligned Bounding Box)
AABB는 간단하면서도 강력한 도구로, 물체나 객체를 직사각형 또는 직육면체로 둘러싸는 최소한의 경계 박스를 의미한다.
AABB는 축에 정렬된 직육면체로, 이 박스의 모든 면이 X,Y,Z 축에 평행한다. AABB는 두 점으로 정의된다.
최소 점(min point) : AABB의 가장 작은 좌표( 보통 좌측 하단 후면)로 가장 작은 x,y,z 값을 갖는다
최대 점(max point) : AABB의 가장 큰 좌표(보통 우측 상단 전면)로 가장 큰 x,y,z 값을 갖는다
이 두 점을 이용하여 AABB를 정의할 수 있다. AABB는 물체의 경계를 계산할 때 좌표 축에 대해 평행한 직육면체를 사용해 매우 빠르게 충돌 감지나 경계 계산을 수행할 수 있다.
AABB의 계산 방법
AABB는 주로 물체의 모든 점의 최솟값과 최댓값을 기반으로 계산된다.
예를 들어 3D 모델이나 물체가 있을 때, 그 물체를 둘러싸는 AABB를 구하려면 물체의 모든 점을 살펴보고,
각 축에서 최소 값과 최대 값을 찾아내면 된다.
3D 물체의 AABB 구하는 방법
- 물체의 각 점(vertex)을 고려하여 x,y,z 축에 대해 최소 값과 최대 값을 구합니다.
- 그 값들이 바로 AABB의 min point와 max point가 된다.
예시
물체의 8개의 정점이 있다고 하였을때
정점 1 (1,2,3)
정점 2 (4,5,6)
정점 3 (2,7,8)
...
이 정점들에 대해 x,y,z 값의 최소값과 최댓값을 계산하면 AABB가 정의된다.
만약 X축, Y축, Z축에 대해 각각 최솟값과 최댓값을 구했을 때
min point = 1,2,3
max point = 4,7,8이며
AABB는 1,2,3 에서 4,7,8로 정의된다.
1. AABB의 특성
AABB의 가장 큰 특징은 각 축에 대해 평행하게 정렬된 직육면체라는 점이다. 즉 AABB는 항상 X,Y,Z 축에 평행한다.
이 특성 때문에 AABB는 간단하고 빠르게 충돌을 감지할 수 있다.
AABB는 물체가 회전을 할 때에도 AABB 자체가 회전하지 않는다. 즉 AABB는 항상 축에 평행하므로 물체가 회전하면
AABB가 물체를 완전히 둘러싸지 않게 될 수 있다.
AABB는 2D와 3D에서 모두 사용될 수 있다. 2D에서 사용될 때 AABB는 사각형이 되고, 3D에서는 정육면체가 된다.
1. 2D 에서의 AABB 계산
두 개의 2D AABB가 주어졌을 때, AABB가 겹치는지 확인하는 방법은 각 축 (X축과 Y축)에서 최소값과 최대값을 비교하는 방식이다.
AABB1 (min_x1, min_y1) to (max_x1, max_y1)
AABB2 (min_x2, min_y2) to (max_x2, max_y2)
두 AABB가 충돌하지 않으려면 , 한 AABB가 다른 AABB의 한 축에서 완전히 벗어하는 경우이다.
충돌하지 않는 조건
- AABB1의 max_x가 AABB2의 min_x보다 작으면 충돌하지 않음
- AABB1의 min_x가 AABB2의 max_x보다 클 경우 충돌하지 않음
- AABB1의 max_y가 AABB2의 min_y보다 작으면 충돌하지 않음
- AABB1의 min_y가 AABB2의 max_y보다 클 경우 충돌하지 않음.
이 조건들을 모두 만족하지 않으면 두 AABB는 충돌한 상태이다.
2. 3D AABB 충돌 감지
- AABB1: (min_x1, min_y1, min_z1) to (max_x1, max_y1, max_z1)
- AABB2: (min_x2, min_y2, min_z2) to (max_x2, max_y2, max_z2)
충돌하지 않는 조건
- AABB1의 max_x가 AABB2의 min_x보다 작거나, AABB1의 min_x가 AABB2의 max_x보다 클 경우 충돌하지 않음.
- AABB1의 max_y가 AABB2의 min_y보다 작거나, AABB1의 min_y가 AABB2의 max_y보다 클 경우 충돌하지 않음.
- AABB1의 max_z가 AABB2의 min_z보다 작거나, AABB1의 min_z가 AABB2의 max_z보다 클 경우 충돌하지 않음.
해당 조건들이 모두 만족하지 않는 경우 두 AABB는 충돌한다.
그림 예시
이런식으로 비교하여 충돌 검사를 하는것이 AABB충돌이다.
3D에서는 단순히 정육면체로 z축까지 검사한다고 보면 된다.
'Math' 카테고리의 다른 글
게임에서 사용하는 수학 활용 공부(3) OBB 충돌 (0) | 2025.03.26 |
---|---|
게임에서 사용하는 수학 활용 공부(1) (0) | 2025.03.25 |
삼각함수를 이용한 게임 수학 (1) | 2025.03.24 |
행렬의 곱셈 (0) | 2024.12.04 |
삼각함수 기초(1) (2) | 2024.01.04 |