보통 오브젝트 사이의 거리를 구할 때, magnitude를 사용한다.
그런데, sqrMagnitude라는 값이 따로 존재하는데, 이는 magnitude를 제곱한 값이다.
왜 이러한 값이 필요할까?
두 점 사이의 거리를 구할 때, 우리는 피타고라스의 정의를 이용한다.
3차원 상에서 x, y, z 값의 차의 제곱을 이용해서 거리를 구하는 것은 사실 피타고라스 정의를 2번 사용해서 구하는 것이다.
피타고라스 정의는 삼각형의 빗변을 구하는 공식으로 아래와 같다.
직각삼각형의 빗변을 c라고 하고, 나머지 두 변을 각각 a, b라고 할 때, 다음과 같은 공식이 성립한다.
a^2 + b^2 = c^2
원래 피타고라스 정의에 의하면, 빗변은 제곱의 값을 가지는데, 사실 magnitude는 이 제곱에 제곱근(흔히 말하는 루트)을 하여 값을 반환해주는 것이다.
그러면 sqrMagnitude는 무엇일까?
바로 이 제곱근을 하기 전에 값을 반환해준다.
사실 개발자들이 값을 비교하기에는 당연히 magnitude 값이 훨씬 편하다.
하지만, 성능면에서 제곱근을 하는 것이 당연히 효율이 떨어진다.
따라서, 업데이트 등 해당 값을 계속 확인해주는 작업이 필요한 경우에 sqrMagnitude를 사용하는 것이 성능 면에서 우수한 것이다.
지금까지 magnitude 말고는 있는 줄도 몰랐던 것을 알게 되었다.
사실 sqrMagnitude를 많이 사용할 지는 모르겠지만, 성능 최적화는 개발자에게 있어서 필수적인 구현 사항이라고 생각하기 때문에 알아두는 편이 좋을 것 같다.