원점에 대한 점 X의 회전은 반시계 방향으로 각도 θ만큼 -
원점에 대한 X x θ 역 clRotateockwise:X*polar( 1.0,θ ).
여기에서 복소수에 대한 polar 함수는
점 Y에 대한 점 X의 회전
다른 점을 중심으로 한 점을 회전하려면 모든 좌표가 특정 방향으로 이동하는 변환을 사용합니다.
Y를 중심으로 X를 회전하는 단계
-
X를 Y로 변환하면 Y가 새 원점이 됩니다. 이것은 모든 점에서 Y를 빼서 수행할 수 있습니다. X는 이제 X-Y가 됩니다.
-
위의 공식을 사용하여 새 원점에 대해 (X-Y) 회전:(X-Y)*polar( 1.0,θ )
-
모든 점에 Y를 추가하여 역번역합니다.
Y에 대한 X의 회전은 (X-Y)*polar( 1.0,θ ) + Y입니다.
다음은 다른 점에 대한 점의 회전을 보여주는 코드입니다.
예시
#include <iostream> #include <complex> using namespace std; typedef complex<double> point; #define x real() #define y imag() int main(){ // Rotate P about Q point X(5.0, 3.0); point Y(2.0, 4.0); // Angle of rotation is 90 degrees double theta = 3.14/2; point Xnew=(X-Y) * polar(1.0, theta) + Y; cout << "rotating X 90 degrees anti-clockwise about Y becomes:"; cout << "(" << Xnew.x << ", " << Xnew.y << ")" << endl; return 0; }
출력
rotating X 90 degrees anti-clockwise about Y becomes:(3.00239, 6.9992)