회전 행렬을 도출하는 데 사용되는 모든 표준 회전 공식은 원점을 중심으로 회전하기위한 것입니다. 특정 점을 중심으로 회전을 적용하려면 먼저 원점을 오프셋하거나 회전하려는 점이 원점에 오도록 오브젝트를 이동시켜야합니다.
2D 사례가 더 간단하고 기술 규모가 크기 때문에 먼저 2D 사례를 고려하십시오. 원점을 중심으로 너비 2의 큐브가 있고 중심을 기준으로 45도 회전하려는 경우 2D 회전 행렬을 간단하게 적용 할 수 있습니다 .
그러나 대신 오른쪽 상단 모서리 ( 1,1
)를 중심으로 회전 하려면 먼저 모서리를 원점으로 변환해야합니다. 번역은으로 번역 할 수 있습니다 -1,-1
. 그런 다음 이전과 같이 객체를 회전 할 수 있지만 객체를 다시 번역하여 (by 1,1
) 수행해야합니다 . 따라서 일반적 R
으로 r
약 점 의 회전에 대한 회전 행렬을 얻으려면 P
다음을 수행하십시오.
R = translate(-P) * rotate(r) * translate(P)
여기서 translate
and rotate
는 정규 변환 / 회전 행렬입니다. 이런 일이 발생함에 따라, 이것은 회전에 축을 공급해야하는 경우를 제외하고는 3D로 간단하게 확장됩니다. 항상 표준 X, Y 또는 Z 축 회전 행렬을 선택할 수는 있지만 지루합니다. 임의의 축 각도 회전 행렬 을 사용하려고합니다 . R
3D에서 의 최종 결과는 다음과 같습니다.
R = translate(-P) * rotate(a,r) * translate(P)
여기서 a
회전 축을 나타내는 단위 벡터이며 회전 P
공간을 나타내는 모형 공간의 3D 점입니다.
공교롭게도, 사원 수는 변환 할 수 있습니다 에 와 에서 당신이 방법은 당신이 그렇게 선택해야한다는 당신의 연결을 할 수 있도록, 행렬 표현. 또는 모든 것을 행렬로 남길 수 있습니다 (쿼터니언은 깔끔한 방식으로 보간하기가 쉽지만 필요한지 여부에 달려 있습니다).
또한:
그래서 꼬리가 로컬 원점이 아닌 벡터를 중심으로 회전하는 것으로 시각화하고 있습니다.
엄밀히 말하면, 벡터를 사용하여 위치를 원점으로부터의 변위로 간주하여 위치를 나타내는 데 사용할 수 있지만 벡터에는 위치 자체가 없으므로 그와 같이 시각화하는 것이 조금 이상합니다.