이 계산기로 할 수 있는 일
이 도구는 내적(dot product)을 이용해 2차원 또는 3차원 공간에서 두 벡터가 이루는 각도를 구합니다. 벡터 a와 벡터 b의 성분을 입력하면 각도를 도(°)와 라디안 두 단위로 모두 보여 주고, 내적 값, 각 벡터의 크기, 그리고 각도의 코사인 값까지 함께 알려 줍니다. 순수 수학은 물론 물리학, 공학, 컴퓨터 그래픽스, 머신러닝의 유사도 계산까지 폭넓게 활용할 수 있습니다.
사용 방법
각 벡터의 x, y 성분(필요하다면 z 성분까지)을 입력하세요. 2차원 벡터라면 z 칸을 비워 두거나 0으로 두면 됩니다. 계산 버튼을 누르면 각도가 표시됩니다. 결과로 나오는 각도는 항상 0°에서 180° 사이의 값으로, 두 방향이 이루는 기하학적(가장 작은) 각도입니다.
공식 설명
내적은 각도와 \(a \cdot b = |a||b|\cos\theta\) 의 관계를 가집니다. 이를 θ에 대해 풀면 다음과 같습니다.
$$\theta = \arccos\!\left( \frac{\text{A}_x\,\text{B}_x + \text{A}_y\,\text{B}_y + \text{A}_z\,\text{B}_z}{\sqrt{\text{A}_x^2 + \text{A}_y^2 + \text{A}_z^2}\;\sqrt{\text{B}_x^2 + \text{B}_y^2 + \text{B}_z^2}} \right)$$내적은 성분별로 곱해 더하는데, \(a \cdot b = a_x b_x + a_y b_y + a_z b_z\) 입니다. 각 벡터의 크기는 성분을 제곱해 합한 값의 제곱근으로, \(|a| = \sqrt{a_x^2 + a_y^2 + a_z^2}\) 입니다. 나눗셈 결과는 반올림 오차를 피하기 위해 arccos를 취하기 전에 \([-1, 1]\) 범위로 제한(클램핑)합니다.
예제로 풀어 보기
\(a = (1, 0, 0)\), \(b = (1, 1, 0)\) 이라고 해 봅시다. 내적은 \(1 \cdot 1 + 0 \cdot 1 + 0 \cdot 0 = 1\) 입니다. 크기는 \(|a| = 1\), \(|b| = \sqrt{2} \approx 1.4142\) 이므로 \(\cos\theta = 1 / (1 \times 1.4142) \approx 0.7071\) 이 됩니다. 따라서 다음과 같습니다.
$$\theta = \arccos(0.7071) = 45° \approx 0.7854 \text{ rad}$$결과 해석
계산기에서 반환되는 각 \(\theta\)는 두 벡터의 길이와 무관하게 서로 어떻게 지향되어 있는지를 나타냅니다. \(\cos\theta\)의 부호와 크기는 기하학적 관계를 한눈에 알려줍니다.
- \(\theta = 0^\circ\) (\(\cos\theta = 1\)) — 평행 / 같은 방향. 벡터들이 정확히 같은 방향을 가리키며, 하나는 다른 하나의 양의 스칼라배입니다.
- \(0^\circ < \theta < 90^\circ\) (\(\cos\theta > 0\)) — 예각. 내적이 양수이고 벡터들이 대체로 유사한 방향을 가리킵니다.
- \(\theta = 90^\circ\) (\(\cos\theta = 0\)) — 직교 (수직). 내적이 정확히 0입니다. 이는 수직성의 정의적 판별법입니다.
- \(90^\circ < \theta < 180^\circ\) (\(\cos\theta < 0\)) — 둔각. 내적이 음수이고, 벡터들이 일반적으로 반대 방향을 가리킵니다.
- \(\theta = 180^\circ\) (\(\cos\theta = -1\)) — 반평행 / 반대 방향. 한 벡터는 다른 벡터의 음의 스칼라배입니다.
기계학습과 텍스트 분석에서, \(\cos\theta\) 자체를 코사인 유사도라고 부릅니다. 직접적으로 해석하면: **1** 값은 동일한 방향(최대 유사)을 의미하고, **0**은 직교/무관을 의미하며, **−1**은 반대 방향을 의미합니다. 크기를 무시하기 때문에 같은 지향성이지만 길이가 다른 두 문서나 임베딩은 동일하게 점수가 매겨집니다. 각과 유사도는 동일한 정보를 담고 있으며 — 각은 단순히 유사도의 \(\arccos\)입니다.
공통 각도 기준값
이 표준 각도와 정확한 코사인값들은 결과 검증과 공통 지향성 인식에 유용합니다. 각은 \(\theta = \arccos(\cos\theta)\)에서 구합니다.
| 각도 (도) | 각도 (라디안) | \(\cos\theta\) | 관계 |
|---|---|---|---|
| 0° | \(0\) | 1.0000 | 평행 (같은 방향) |
| 30° | \(\pi/6\) | 0.8660 | 예각 |
| 45° | \(\pi/4\) | 0.7071 | 예각 |
| 60° | \(\pi/3\) | 0.5000 | 예각 |
| 90° | \(\pi/2\) | 0.0000 | 직교 (수직) |
| 120° | \(2\pi/3\) | −0.5000 | 둔각 |
| 135° | \(3\pi/4\) | −0.7071 | 둔각 |
| 150° | \(5\pi/6\) | −0.8660 | 둔각 |
| 180° | \(\pi\) | −1.0000 | 반평행 (반대) |
60°와 같은 십진 도(度) 결과를 도분초(DMS)로 변환하려면, 60° 변환을 사용할 수 있습니다.
자주 묻는 질문
2차원 벡터도 사용할 수 있나요? 네, z 성분을 0으로 두면 공식이 자연스럽게 2차원 경우로 줄어듭니다.
각도가 180°를 넘지 않는 이유는 무엇인가요? arccos 함수는 0부터 π(180°)까지의 값만 반환하기 때문입니다. 이는 방향에 관계없이 두 벡터 사이의 가장 작은 각도를 나타냅니다.
벡터가 영벡터이면 어떻게 되나요? 영벡터는 방향이 없어 각도를 정의할 수 없습니다. 이 계산기는 0으로 나누는 오류를 막기 위해 크기가 0일 때 각도를 0°로 표시합니다.