Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++에서 다른 점을 중심으로 한 점 회전

<시간/>

원점에 대한 점 X의 회전은 반시계 방향으로 각도 θ만큼 -

원점에 대한 X x θ 역 clRotateockwise:X*polar( 1.0,θ ).

여기에서 복소수에 대한 polar 함수는 헤더 파일에 정의되어 있으며 위상각과 크기를 사용하여 복소수를 찾는 데 사용됩니다. polar(mag,angle)은 복소수를 반환합니다.

점 Y에 대한 점 X의 회전

다른 점을 중심으로 한 점을 회전하려면 모든 좌표가 특정 방향으로 이동하는 변환을 사용합니다.

C++에서 다른 점을 중심으로 한 점 회전

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)