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)
广告