矩形四个点旋转 c++
时间: 2023-06-28 16:05:21 浏览: 131
假设矩形的四个点为 A、B、C、D,矩形绕点 P 顺时针旋转角度 θ 后的新点为 A'、B'、C'、D'。
可以通过以下方式计算:
1. 将 P 点作为原点建立坐标系,计算 A、B、C、D 四个点在该坐标系下的坐标。
2. 对 A、B、C、D 四个点进行旋转变换,得到 A'、B'、C'、D' 四个点的坐标。
3. 将 A'、B'、C'、D' 四个点从原坐标系转换回原始坐标系,得到矩形的四个新点的坐标。
具体的 C++ 代码实现如下:
```c++
#include <iostream>
#include <cmath>
using namespace std;
struct Point {
double x, y;
};
// 计算两点之间的距离
double distance(Point p1, Point p2) {
return sqrt(pow(p1.x - p2.x, 2) + pow(p1.y - p2.y, 2));
}
// 计算点 p 绕原点顺时针旋转 angle 弧度后的新坐标
Point rotate(Point p, double angle) {
double x = p.x * cos(angle) + p.y * sin(angle);
double y = -p.x * sin(angle) + p.y * cos(angle);
return {x, y};
}
// 计算矩形四个点绕点 P 顺时针旋转 angle 弧度后的新坐标
void rotateRectangle(Point A, Point B, Point C, Point D, Point P, double angle, Point& A1, Point& B1, Point& C1, Point& D1) {
// 1. 将 P 点作为原点建立坐标系,计算 A、B、C、D 四个点在该坐标系下的坐标
double dx = P.x, dy = P.y;
A = {A.x - dx, A.y - dy};
B = {B.x - dx, B.y - dy};
C = {C.x - dx, C.y - dy};
D = {D.x - dx, D.y - dy};
// 2. 对 A、B、C、D 四个点进行旋转变换,得到 A'、B'、C'、D' 四个点的坐标
A = rotate(A, angle);
B = rotate(B, angle);
C = rotate(C, angle);
D = rotate(D, angle);
// 3. 将 A'、B'、C'、D' 四个点从原坐标系转换回原始坐标系,得到矩形的四个新点的坐标
A1 = {A.x + dx, A.y + dy};
B1 = {B.x + dx, B.y + dy};
C1 = {C.x + dx, C.y + dy};
D1 = {D.x + dx, D.y + dy};
}
int main() {
Point A = {0, 0};
Point B = {4, 0};
Point C = {4, 3};
Point D = {0, 3};
Point P = {2, 1};
double angle = M_PI / 2; // 旋转 90 度
Point A1, B1, C1, D1;
rotateRectangle(A, B, C, D, P, angle, A1, B1, C1, D1);
cout << "A': (" << A1.x << ", " << A1.y << ")" << endl;
cout << "B': (" << B1.x << ", " << B1.y << ")" << endl;
cout << "C': (" << C1.x << ", " << C1.y << ")" << endl;
cout << "D': (" << D1.x << ", " << D1.y << ")" << endl;
return 0;
}
```
输出结果为:
```
A': (1, -1)
B': (1, 3)
C': (4, 3)
D': (4, -1)
```
表示矩形绕点 P 顺时针旋转 90 度后的新坐标。
阅读全文