쉬운 좌표변환

Beejei
3 min readNov 26, 2020

--

나는 수학을 잘 하지 않는다. 특히 공식을 외워서 뭔가를 적용한 건 2차방정식까지가 한계다. 편미분을 한때 열심히 공부했지만 3개월 후에 완전히 잊어버렸다. 그런 수학을 잘 하려면 어느정도 기억력이 받쳐줘야 한다고 생각한다. 매트릭스의 경우도 고등학교 수학 까지는 나에게 이와 비슷한 것 중 하나였고, 솔직히 표기의 편의성 이외에 존재의 이유 자체가 이해가 되지 않았었다.

하지만 우연히 3d 렌더링 알고리즘을 고민하던 중, 매트릭스의 존재이유를 이해할 수도 있을법한 식 유도방법(이라기보다는 컨셉)을 알게 되어 매트릭스를 있는 그대로 좀 더 잘 이해할 수 있게 되었다. 이때 이후로 매트릭스 식을 보는 데 좀 더 마음이 가벼워졌으므로 간단히 메모.

2차원 회전변환을 예로 설명

말할 필요도 없이 모두들 코사사코로 이해하고 있는 바로 그 공식이다.

x’ = x*cosθ -y*sinθ, y’ = x*sinθ+y*cosθ

지금도 저 위키 페이지를 들어가서 유도방식을 보고 있으면 눈이 빠질 것 같은데, 그것보다 좀 더 도움이 될 만한 설명방식이 이게 될 수도 있다.

위 그림에서 회전 전의 x,y와 회전 후의 x’,y’만을 놓고 이렇게 생각해 보자.

“회전 전에는 x값 만큼 (1,0)이라는 노멀벡터를 곱하고, y값만큼 (0,1)이라는 노멀벡터를 곱해서 둘을 합친 게 좌표상의 위치였다.”

라고 한다면

“회전 후에는 이를테면 x값만큼 (0.564642, 0.825336)라는 노멀벡터를 곱하고, y값만큼 (0.825336, 0.564642)라는 노멀벡터를 곱해서 둘을 합친 게 좌표상의 위치다”

라고 생각할 수 있으면 이 공식의 이유가 좀 더 이해하기 편해진다.

이 컨셉의 장점은 비단 회전변환뿐만 아니라, 모든 종류의 좌표변환에 응용해서 이해하기가 매우 쉽다는 점이고, 노멀벡터의 방향과 스칼라를 상상할 수만 있으면 3D좌표변환도 같은 접근으로 복잡한 공정 없이 풀어볼 수 있다는 점이다.

3D 좌표변환 시에는 내적과 외적을 이용하면 법선벡터를 구할 수 있으므로 알고리즘이 쉽게 만들어진다.

단점은 노멀벡터를 기준으로 모든 값을 곱해서 만들어내기 때문에 작은 부동소수점 자료형을 이용하면 오차가 꽤 발생할 가능성도 있다는 점인데, 어지간해서는 이제 다들 double을 64bit로 쓸 것이니 괜찮다고 생각한다.

조금 더 익숙해지면 쿼터니언의 숫자를 보고도 좌표계를 떠올릴 수 있게 된다.

작은 아이디어가 도움이 되기를 기원하며.

--

--

Beejei
Beejei

Written by Beejei

Writing for the better world. Let's give us time to recover, time to understand.

No responses yet