3변중 어느 2변의 비를 삼각비라 한다. \[ \frac{a}{c}, \quad \frac{c}{a}, \quad \frac{a}{b}, \quad \frac{b}{a}, \quad \frac{b}{c}, \quad \frac{c}{b} \] 가 모두 삼각비다. 그중 우리는 중요한 3가지의 비를 sinθ,cosθ,tanθ라 한다. B= θ일때
그리고 우린 sin,cos,tan중 하나의 값만 알아도 피타고라스정리로 나머지를 구할 수 있습니다.
이런 삼각비를 삼각형의 내각 범위를 넘어 모든 각으로 확장시킨 개념이 삼각함수다. 삼각함수는 원과 밀접한 관련이 있다. 그래서 원의 그래프를 이용해서 삼각함수 그래프를 그릴 수 있다. 그래프에 원점이 (0, 0)이고 반지름이 1인 원을 그려보자.이런 원을 단위원이라 부른다. 원의 중점에서 원 위의 한 점을 잇고, 그 점에서 x축으로 선분을 내려보자. 그럼 직각삼각형이 만들어진다.
P의 좌표는 (cosθ,sinθ)가 된다 빗변의 길이가 1이면 밑변은 cosθ, 높이는 sinθ 가 되고 모든 좌표는 (cosθ,sinθ)가 된다.
빗변의 길이가 n이면 ncosθ , nsinθ이 된다. θ와 거리(빗변의 길이)를 알면 좌표를 특정할 수 있다.
역삼각함수
역삼각함수:삼각함수의 값을 각도로 변환하는 함수로, 특정 방향이나 각도를 계산할 때 활용됨.
주요 함수:
아크사인 (arcsin):주어진 sin 값에 대응하는 각도를 반환.
아크코사인 (arccos):주어진 cos 값에 대응하는 각도를 반환.
아크탄젠트 (arctan):주어진 tan 값에 대응하는 각도를 반환.
아크탄젠트2 (arctan2):두 좌표값(x, y)을 받아, 해당 점의 각도를 반환.
arctan2는 사실 atan2와 동일한 함수입니다. 일부 문서나 수학에서 arctan2라고 언급하는 경우도 있지만, 대부분의 프로그래밍 언어나 수학적 문맥에서는 atan2라는 이름으로 불립니다.
1. 아크사인 (arcsin)
용도: 주어진 sin 값에 대응하는 각도를 반환합니다.
게임 활용:
높이 계산: 삼각형을 이용해 물체가 상승하거나 하강하는 각도를 계산할 때 사용됩니다. 예를 들어, 발사각이 주어졌을 때 목표물까지의 높낮이를 계산하거나, 중력 영향을 받는 물체의 경로를 예측할 때 사용할 수 있습니다.
예시: 캐릭터가 특정 고도에서 특정 각도로 점프하는 게임에서, 점프를 위한 각도를 계산할 때 아크사인을 사용할 수 있습니다.
2. 아크코사인 (arccos)
용도: 주어진 cos 값에 대응하는 각도를 반환합니다.
게임 활용:
두 벡터 간의 각도 계산: 두 물체(예: 플레이어와 적) 사이의 각도를 계산할 때 사용됩니다. 이를 통해 두 객체가 서로 어느 방향을 향하고 있는지 확인할 수 있습니다.
예시: 플레이어와 적이 각자의 방향을 향하고 있을 때, 서로의 상대 각도를 계산하여 충돌을 감지하거나 회피 동작을 결정할 수 있습니다.
3. 아크탄젠트 (arctan)
용도: 주어진 tan 값에 대응하는 각도를 반환합니다.
게임 활용:
이동 방향 계산: 이동하는 물체의 방향을 계산할 때 사용됩니다. 예를 들어, 캐릭터가 일정한 방향으로 이동할 때, 현재 이동 방향의 각도를 계산하여 해당 각도로 회전시킬 수 있습니다.
예시: 플레이어가 마우스로 클릭한 목표 지점까지의 방향을 계산하거나, 공격이 이동할 각도를 계산할 때 유용합니다.
4. 아크탄젠트2 (arctan2)
용도: 두 좌표 (x, y) 값을 받아 해당 점의 각도를 반환합니다.
게임 활용:
목표 추적: 아크탄젠트2는 주로 목표물이나 적을 추적할 때 사용됩니다. 예를 들어, 플레이어가 마우스를 클릭한 지점이나 다른 캐릭터의 위치를 향해 무기나 캐릭터의 방향을 조정할 때 유용합니다.
예시: 적을 추적하는 미사일이나, 플레이어가 마우스를 움직여서 조준하는 FPS에서, 마우스 좌표와 플레이어의 상대적인 방향을 계산하여 회전하도록 할 수 있습니다.
응용:
플레이어가 공격 방향을 조정할 때.
AI 캐릭터가 목표를 추적할 때.
물리 기반 게임에서 물체가 목표를 향해 날아가도록 설정할 때.
호도법
호도법이란 과학 등의 분야에서 정의하는 각도의 단위로 ㎭으로 표시하고, 라디안(radian)으로 읽습니다.
라디안(θ)은 호의 길이와 반지름의 길이가 같은 부채꼴의 중심각을 1로 정의하고 있습니다. 그래서 180도가 몇 라디안인지 계산해보니 3.141592... 라디안이 나왔습니다. 그래서 우린 호도법에서 180도를 𝝅라고 부르기로 했습니다.
특수각이라 부르는 각도들의 값.
스칼라 (Scalar)
스칼라는 크기만 존재하는 물리량입니다. 방향이 없으며 단순히 숫자로 표현됩니다.
예시:
온도: 30°C
질량: 5kg
속력: 60km/h
벡터 (Vector)
벡터는 크기와 방향을 모두 가진 물리량입니다. 보통 화살표로 표현되며 2D에서는 \( (x, y) \), 3D에서는 \( (x, y, z) \) 형태로 나타냅니다.
발사체의 시작 위치에서 발사체의 방향과 속력을 이용해 매 프레임마다 새 좌표를 계산.
추억속의 1945에서 원뿔형으로 나가는 저 탄막들이 각도(θ) 와 탄막의 속력을 이용해서 얻은 이동거리(d)를 삼각함수를 적용하여 x, y 좌표를 프레임마다 갱신할 수 있다.
2. 현재 좌표와 이동할 좌표로 각도와 이동 거리 계산
두 좌표 \((x_1, y_1)\)와 \((x_2, y_2)\)가 주어진 경우:
1. 거리 계산: 두 점 사이의 직선 거리를 구할 때는 피타고라스 정리를 사용합니다. \[ \text{거리} = \sqrt{(x_2 - x_1)^2 + (y_2 - y_1)^2} \] 이는 두 점 간의 실제 이동 거리를 나타내며, 캐릭터가 목표 지점으로 이동하거나 투사체가 목표를 향해 나아갈 때 필요합니다.
2. 각도 계산: 이동 방향의 각도를 구하려면 \(\text{atan2}\)를 사용합니다. \[ \theta = \text{atan2}(y_2 - y_1, x_2 - x_1) \] - \(\text{atan2}\)는 \(y\)축과 \(x\)축의 차이를 기반으로 올바른 사분면의 각도를 반환합니다. - 반환된 각도는 라디안 값으로, 이를 필요에 따라 각도로 변환할 수 있습니다: \[ \text{각도} = \theta \times \frac{180}{\pi} \]
3. 이동 벡터로 변환: 목표 좌표까지 이동할 벡터를 계산하려면 거리와 각도를 활용합니다: \[ dx = \cos(\theta) \times \text{거리}, \quad dy = \sin(\theta) \times \text{거리} \] 이를 통해 한 프레임 동안 캐릭터를 어느 방향으로 얼마나 이동시킬지 계산할 수 있습니다.
function calculateMovement(x1, y1, x2, y2) {
// 거리 계산
const distance = Math.sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2);
// 각도 계산 (라디안 값)
const angleRadians = Math.atan2(y2 - y1, x2 - x1);
// 각도 계산 (도 단위로 변환, 필요시 사용)
const angleDegrees = angleRadians * (180 / Math.PI);
// 이동 벡터 계산
const dx = Math.cos(angleRadians) * distance;
const dy = Math.sin(angleRadians) * distance;
return {
distance,
angleRadians,
angleDegrees,
vector: { dx, dy },
};
}
// 예시 좌표
const x1 = 0, y1 = 0; // 현재 좌표
const x2 = 3, y2 = 4; // 이동할 좌표
const result = calculateMovement(x1, y1, x2, y2);
console.log(result);
3. 기울기로 좌표를 계산
기울기(각도 \(\theta\))와 이동 거리 \(d\)가 주어진 경우, 새 좌표를 계산할 수 있습니다:
1. 새 좌표 계산: \[ x' = x + d \cdot \cos(\theta), \quad y' = y + d \cdot \sin(\theta) \] 여기서: - \(\cos(\theta)\)와 \(\sin(\theta)\)는 방향 벡터를 나타냅니다. - \(d\)는 이동 거리입니다.
2. 활용 예시: - 캐릭터가 일정한 속도로 특정 방향으로 이동하는 경우. - AI나 투사체가 목표물을 향해 이동할 때.
---
4. 프러스텀 컬링(Frustum Culling)에서의 시야각 계산
프러스텀 컬링은 카메라 시야 밖의 오브젝트를 렌더링하지 않는 최적화 기법으로, 삼각함수를 활용하여 오브젝트가 시야 안에 있는지 판단합니다.
1. 카메라 시야각(FOV): - 시야의 중심에서 좌우 끝까지의 각도를 삼각함수로 계산합니다. - 예를 들어, FOV가 90도라면: \[ \text{좌측 경계 각도} = \text{카메라 중심 각도} - \frac{\text{FOV}}{2}, \quad \text{우측 경계 각도} = \text{카메라 중심 각도} + \frac{\text{FOV}}{2} \]
2. 오브젝트와 카메라의 상대 각도 계산: - 오브젝트의 좌표 \((x_o, y_o)\)와 카메라 좌표 \((x_c, y_c)\)가 주어졌을 때: \[ \theta_o = \text{atan2}(y_o - y_c, x_o - x_c) \] - 이 값을 카메라 중심 각도와 비교하여 FOV 범위 내에 있는지 확인합니다.
3. 시야 안에 있는지 판단: \[ \text{조건: } \text{좌측 경계 각도} \leq \theta_o \leq \text{우측 경계 각도} \]
---
5. 이동 벡터(키보드)와 방향 벡터(마우스)
1. 이동 벡터: 키보드 입력으로 생성된 이동 벡터는 삼각함수로 계산됩니다. 예를 들어, WASD 입력이 다음과 같이 매핑된 경우: - \(W: +y\) 방향 - \(S: -y\) 방향 - \(A: -x\) 방향 - \(D: +x\) 방향
이동 방향을 결정하려면 키 입력을 조합하여 방향 벡터를 계산합니다: \[ dx = (\text{D 입력} - \text{A 입력}), \quad dy = (\text{W 입력} - \text{S 입력}) \]
2. 방향 벡터: 마우스 움직임으로 캐릭터의 회전 각도(카메라 회전) 또는 투사체의 발사 각도를 조정합니다. 예를 들어, 마우스 움직임으로 새로운 각도 \(\theta\)를 계산한 후, 이동 방향을 업데이트합니다: \[ dx = \cos(\theta), \quad dy = \sin(\theta) \]
---
6. 내 좌표와 오브젝트 좌표로 앞/뒤/좌/우 판별
1. 상대 벡터 계산: 오브젝트 좌표 \((x_o, y_o)\)와 내 좌표 \((x, y)\)가 주어졌을 때: \[ \text{상대 벡터 } (dx, dy) = (x_o - x, y_o - y) \]
2. 앞/뒤 판별: 내 방향 벡터 (예: \(v_f = (\cos(\theta), \sin(\theta))\))와 상대 벡터 \( (dx, dy)\) 간의 내적(dot product)을 계산합니다: