📋 요약 한 줄 요약 변화량은 각 항목의 차이를 담은 벡터이다. 벡터의 길이는 원점에서 그 벡터의 끝점까지의 거리이고, 두 점 사이 거리는 차이 벡터의 길이이다.
2026-09-30 수학 공부 대화에서 배운 내용을 정리한 개인 학습 노트.
1. 벡터(Vector)는 순서가 있는 숫자 묶음
이 노트에서는 벡터를 [2,5]처럼 순서가 있는 숫자 묶음으로 표현한다. 각 자리에 담는 값의 의미를 정해 두어야 한다.
- 서버 상태라면
[대기 요청 수, 처리 중인 요청 수]로 나타낼 수 있다. - 평면 위 위치라면
[가로 좌표, 세로 좌표]로 나타낼 수 있다.
벡터는 상태나 위치도 표현하고, 두 상태나 위치의 차이도 표현한다. 모든 벡터가 변화량인 것은 아니다.
2. 변화량(Change)은 같은 자리끼리 뺀다
이전 상태가 A, 이후 상태가 B이면 변화량은 B - A이다.
A = [2,5]
B = [6,8]
변화량 = [6-2, 8-5]
= [4,3]
첫 번째 값은 4 증가했고, 두 번째 값은 3 증가했다는 뜻이다. 위치로 해석하면 A에서 B로 가기 위해 가로 방향으로 4, 세로 방향으로 3 이동한다.
💡 TIP 변화량을 구할 때는 제곱하지 않는다 변화량 계산은 자리별 뺄셈이다. 제곱과 루트는 그다음 거리 계산에서 사용한다.
순서를 바꾸면 방향도 바뀐다. 같은 예시에서 A - B = [-4,-3]이다.
두 상태가 같다면:
A = [2,5]
B = [2,5]
변화량 = [0,0]
[0,0]은 두 항목 모두 변화가 없다는 뜻이다. []은 값이 없는 빈 목록이므로 의미가 다르다.
3. 거리는 차이로 계산한 직선 길이
숫자가 두 개인 벡터 사이의 **유클리드 거리(Euclidean distance)**는 다음과 같이 계산한다.
거리 = sqrt(첫 번째 차이^2 + 두 번째 차이^2)
계산 순서는 빼기 → 각각 제곱 → 더하기 → 루트이다.
A = [a1,a2], B = [b1,b2]라고 쓰면, a1과 b1은 첫 번째 값이고 a2와 b2는 두 번째 값이다. 공식은 다음과 같다.
A = [2,5]
B = [6,8]
차이 = [4,3]
거리 = sqrt(4^2 + 3^2)
= sqrt(16 + 9)
= sqrt(25)
= 5
| 알고 싶은 것 | 계산 결과 | 의미 |
|---|---|---|
| 각 항목이 얼마나 변했는가 | 변화량 [4,3] | 항목별 차이와 방향 |
| 두 점 사이의 직선 길이는 얼마인가 | 거리 5 | 길이를 나타내는 숫자 하나 |
변화량에는 음수가 나올 수 있지만, 거리는 0 이상이다. A에서 B까지의 거리와 B에서 A까지의 거리는 같다.
벡터의 길이와 두 점 사이 거리는 어떻게 다른가
길이와 거리는 같은 길이 계산 원리를 사용한다. 다만 어떤 벡터나 두 점을 대상으로 재는지를 구분해야 한다.
- 벡터 B의 길이: 원점
[0,0]에서 B의 끝점까지의 거리. - A와 B 사이의 거리: A에서 B까지의 직선 길이. 차이 벡터
B - A의 길이로 계산한다.
여기서 원점(origin)은 좌표가 모두 0인 기준점이다. 이 노트의 평면에서는 [0,0]이다.
예시 1: B 자체의 길이
B = [6,8]
B의 길이 = [0,0]에서 [6,8]까지의 거리
= sqrt((6-0)^2 + (8-0)^2)
= sqrt(6^2 + 8^2)
= sqrt(36 + 64)
= sqrt(100)
= 10
예시 2: A에서 B까지의 길이, 즉 두 점 사이 거리
A = [2,5]
B = [6,8]
가로 차이 = 6-2 = 4
세로 차이 = 8-5 = 3
차이 벡터 = [4,3]
A→B 길이 = sqrt((6-2)^2 + (8-5)^2)
= sqrt(4^2 + 3^2)
= sqrt(16 + 9)
= sqrt(25)
= 5
| 구하려는 값 | 어디에서 어디까지 재는가 | 결과 |
|---|---|---|
| B의 길이 | [0,0]에서 [6,8]까지 | 10 |
| A와 B 사이 거리 | [2,5]에서 [6,8]까지 | 5 |
차이 벡터 [4,3]의 길이 | [0,0]에서 [4,3]까지 | 5 |
📌 IMPORTANT 두 점 사이 거리 = 차이 벡터의 길이
거리(A,B) = 길이(B-A)이다. “길이와 거리는 완전히 다른 계산”이 아니라, 무엇의 길이를 재는지에 따라 입력과 결과가 달라진다. 특히 “A→B의 길이”와 “A와 B 사이 거리”는 같은 뜻이다.
정규화(Normalization)에서는 어느 길이를 사용하는가
지금 배우는 정규화는 길이가 0이 아닌 벡터의 각 값을 그 벡터 자체의 길이로 나누어, 방향을 유지하면서 길이를 1로 맞추는 작업이다.
B = [6,8]
B의 길이 = 10
B를 정규화 = [6/10, 8/10]
= [0.6,0.8]
B 자체를 정규화하려면 B의 길이인 10을 사용한다. A와 B 사이 거리인 5를 사용하는 것이 아니다. 반면 A에서 B로 향하는 차이 벡터 [4,3]을 정규화하려면, 그 차이 벡터의 길이인 5로 나누어 [0.8,0.6]을 구한다.
4. 개발에서는 거리를 언제 쓰는가
게임: 공격 범위 안에 있는지 판단
내 위치가 [2,5], 적 위치가 [6,8]이면 거리는 5이다. 공격 범위가 5라면 적이 범위 안에 있다.
val canAttack = distance <= 5.0
차이 벡터는 적이 어느 방향에 있는지 나타내고, 거리는 공격 범위 안에 있는지 판단하는 조건에 사용할 수 있다.
5. Kotlin으로 계산하기
다음 Kotlin 코드는 두 위치의 차이와 거리를 계산한다.
import kotlin.math.sqrt
fun main() {
val a = doubleArrayOf(2.0, 5.0)
val b = doubleArrayOf(6.0, 8.0)
// 변화량: 같은 자리끼리 빼기
val dx = b[0] - a[0] // 4.0
val dy = b[1] - a[1] // 3.0
// 거리: 각각 제곱 → 더하기 → 루트
val sumOfSquares = dx * dx + dy * dy // 25.0
val distance = sqrt(sumOfSquares) // 5.0
val canAttack = distance <= 5.0
println(distance) // 5.0
println(canAttack) // true
}
배열의 [0]은 첫 번째 값, [1]은 두 번째 값이다. 채팅에서 쓰는 dx^2는 이 코드에서 dx * dx로 계산한다.
참고 자료
- Unity 공식 문서 — Vector3.Distance: 두 위치 사이의 거리를 계산하는 API.