Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

การหมุนจุดรอบจุดอื่นใน C++


การหมุนจุด X รอบจุดกำเนิดทำได้โดยมุม θ ในทิศทางทวนเข็มนาฬิกาทำได้โดย −

X โดย θ เกี่ยวกับต้นกำเนิด anti-clRotateockwise:X*polar( 1.0,θ )

ในที่นี้ ฟังก์ชันขั้วสำหรับจำนวนเชิงซ้อนถูกกำหนดภายใต้ไฟล์ส่วนหัว และใช้เพื่อค้นหาจำนวนเชิงซ้อนโดยใช้มุมเฟส และ magnitude.polar(mag,angle) จะคืนค่าจำนวนเชิงซ้อน

การหมุนของจุด X รอบจุด Y

ในการหมุนจุดรอบจุดอื่น เราจะใช้การแปลซึ่งการเคลื่อนที่ของพิกัดทั้งหมดเกิดขึ้นในทิศทางใดทิศทางหนึ่ง

การหมุนจุดรอบจุดอื่นใน C++

ขั้นตอนในการหมุน 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)