C++中关于一个点绕另一个点旋转


点X绕原点逆时针旋转θ角度的操作如下:

 绕原点逆时针旋转X的角度θ:X*polar( 1.0,θ )。

此处,复数的polar函数定义在<complex>头文件中,用于使用相位角和幅值查找复数。polar(mag,angle) 返回一个复数。

点X绕点Y旋转

要使一个点绕另一个点旋转,我们将使用平移,其中所有坐标的移动都发生在特定方向上。

X绕Y旋转的步骤。

  • 将X平移到Y,使Y成为新的原点。这可以通过从所有点中减去Y来完成。X现在变为X-Y。

  • 使用上述公式围绕新原点旋转(X-Y):(X-Y)*polar( 1.0,θ )

  • 通过向所有点添加Y进行反向平移。

X绕Y旋转的结果为:(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)

更新于: 2020-07-28

959 次浏览

开启你的职业生涯

通过完成课程获得认证

开始学习
广告