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

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

การหมุนจุด X รอบจุดกำเนิด (origin) ด้วยมุม θ ในทิศทาง عكسเข็มนาฬิกา (anti-clockwise) ทำได้โดย:

X หมุน θ รอบจุดกำเนิด anti-clockwise: X * polar(1.0, θ)

ที่นี่ ฟังก์ชัน polar สำหรับจำนวนเชิงซ้อน (complex numbers) ถูกกำหนดใน header <complex> และใช้หาจำนวนเชิงซ้อนจากมุมเฟส (phase angle) และขนาด (magnitude) polar(mag, angle) คืนค่าจำนวนเชิงซ้อน

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

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

การหมุนจุดรอบจุดอื่นใน 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() {
    // หมุน P รอบ Q
    point X(5.0, 3.0);
    point Y(2.0, 4.0);
    
    // มุมหมุน 90 องศา
    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)