Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Quay một điểm quanh điểm khác trong C++

Quay điểm X quanh gốc gốc bởi góc θ theo chiều ngược kim đồng hồ được thực hiện bằng:

X * polar(1.0, θ)

Hàm polar cho số phức được định nghĩa trong <complex>, dùng để tìm số phức từ góc pha và độ lớn. polar(mag, angle) trả về số phức.

Quay điểm X quanh điểm Y

Để quay một điểm quanh điểm khác, ta dùng phép tịnh tiến - di chuyển tất cả tọa độ theo một hướng xác định.

Quay một điểm quanh điểm khác trong C++

Các bước quay X quanh Y

  • Tịnh tiến X đến Y, để Y trở thành gốc mới. Trừ Y từ tất cả điểm. X thành X-Y.
  • Quay (X-Y) quanh gốc mới: (X-Y) * polar(1.0, θ)
  • Tịnh tiến ngược bằng cách cộng Y vào tất cả điểm.

Công thức: (X-Y) * polar(1.0, θ) + Y

Mã minh họa quay điểm quanh điểm khác:

Ví dụ

#include <iostream>
#include <complex>
using namespace std;

typedef complex<double> point;
#define x real()
#define y imag()

int main() {
    // Quay P quanh Q
    point X(5.0, 3.0);
    point Y(2.0, 4.0);
    // Góc quay 90 độ
    double theta = 3.14 / 2;
    point Xnew = (X - Y) * polar(1.0, theta) + Y;
    cout << "Quay X 90 độ ngược kim đồng hồ quanh Y thành: ";
    cout << "(" << Xnew.x << ", " << Xnew.y << ")" << endl;
    return 0;
}

Đầu ra

Quay X 90 độ ngược kim đồng hồ quanh Y thành: (3.00239, 6.9992)