- 개요

위와 같이 구성된 평면의 방정식을 정규화하는 방법을 알아본다
- 정규화 과정

위와 같이 크기가 1이 아닌 n 법선 벡터가 만들어내는 평면의 방정식이 있다고 가정한다
해당 평면의 방정식을 크기가 1인 법선 벡터로부터의 평면의 방정식으로 변환하는 것이 목표이다
1) 정규화 과정 - 단위 벡터의 평면의 방정식의 계수

크기가 1인 n` 법선 벡터의 값을 각각 (a`, b`, c`)라고 가정한다면
n` 법선 벡터에서 만들어지는 평면의 방정식은 위와 같다

크기가 1이 아닌 법선 벡터를 해당 법선 벡터의 크기로 나눠 정규화할 수 있다
따라서 세 개의 계수 (a, b, c)는 위와 같이 (a`, b`, c`)로 변환할 수 있다
2) 정규화 과정 - 단위 벡터의 평면의 방정식의 상수

평면의 방정식의 상수 d는 평면 위의 한 점으로 향하는 p 벡터와 평면의 n 법선 벡터를 내적한 값의 반대수이다
다음으로 위와 같이 구성된 크기가 1이 아닌 법선 벡터의 평면의 방정식의 상수 d를 상수 d`로 변환해야 한다

법선 벡터의 크기가 1일때 평면의 방정식의 상수는 위와 같이 계산할 수 있다

따라서 최종적으로 d 상수와 d` 상수의 관계는 위와 같다
d 상수도 계수와 동일하게 법선 벡터의 크기로 나누어 d` 상수로 변환할 수 있다
3) 평면의 방정식의 정규화 식

최종적으로 평면의 방정식의 정규화 식은 위와 같다
임의의 네 개의 수로부터 평면의 방정식을 구성하는 경우 평면의 방정식을 정규화시켜주는 것이 유리하다
정규화된 평면의 방정식의 상수 값은 원점으로부터 최단 거리 정보를 담고 있기 때문이다
- 프로젝트에서 정규화된 평면의 방정식의 구현

평면을 구성하는 4개의 수 a, b, c, d의 값이 Vector4로 주어졌을 때
이를 토대로 정규화된 평면의 방정식을 계산하는 코드를 위와 같이 구성하였다
Plane 생성자에서 a, b, c,의 3개의 요소를 법선 벡터로 지정하고 마지막 요소를 D에 지정한다
이후 Normalize 함수를 호출하여 평면의 방정식을 정규화한다

Normalize 함수의 로직은 위와 같다
squaredSize 로컬 변수에 법선 벡터의 크기의 제곱값을 저장한다
squaredSize 변수의 크기가 1인지 확인하고 고속 역제곱근 함수를 통해 계산한 값을 invLength 변수에 저장한다
이후 법선 벡터와 상수 D에 invLength 값을 곱하여 정규화한다
- 2차원에서의 평면의 방정식의 활용
평면의 방정식은 내적을 기반으로 동작하므로 2차원 공간에서도 동일하게 활용할 수 있다
3차원 공간에서 평면이 앞면과 뒷면을 가졌듯이, 2차원 공간의 직선도 앞쪽과 뒤쪽을 가진다

2차원 공간에서의 직선의 방정식이 ax + by + c = 0이라고 가정한다면,
법선 벡터 (a, b)의 크기가 1이면 상수 c의 절대값은 원점에서 직선까지의 최단 거리를 의미한다
따라서 크기가 1이 아닌 법선 벡터의 원점에서 직선까지의 최단 거리는 위와 같다

평면의 방정식을 정규화한 값과 내적을 활용하여 위와 같이
임의의 한 점(x₁, y₁)에서 임의의 직선 ax + by + c = 0까지의 최단 거리를 계산할 수 있다
'수학 > 이득우의 게임 수학' 카테고리의 다른 글
| 절두체 컬링 (4) 원근 투영 행렬을 이용한 평면의 방정식 생성 (0) | 2026.07.08 |
|---|---|
| 절두체 컬링 (3) 평면의 방정식을 활용한 절두체 표현 (0) | 2026.07.01 |
| 절두체 컬링 (1) 평면의 방정식 (0) | 2026.06.24 |
| 원근 투영 (7) 깊이 버퍼의 시각화 (2) (0) | 2026.06.17 |
| 원근 투영 (6) 깊이 버퍼의 시각화 (1) (0) | 2026.06.17 |