变换矩阵,旋转矩形C++代码
时间: 2023-04-02 20:04:16 浏览: 136
以下是一个旋转矩形的 C 代码示例:
```c
#include <stdio.h>
#include <math.h>
typedef struct {
float x, y;
} Point;
typedef struct {
Point center;
float width, height;
float angle;
} Rectangle;
void rotate(Point *p, Point center, float angle) {
float s = sin(angle);
float c = cos(angle);
float x = p->x - center.x;
float y = p->y - center.y;
p->x = x * c - y * s + center.x;
p->y = x * s + y * c + center.y;
}
void rotateRectangle(Rectangle *rect) {
Point p1 = {rect->center.x - rect->width / 2, rect->center.y - rect->height / 2};
Point p2 = {rect->center.x + rect->width / 2, rect->center.y - rect->height / 2};
Point p3 = {rect->center.x + rect->width / 2, rect->center.y + rect->height / 2};
Point p4 = {rect->center.x - rect->width / 2, rect->center.y + rect->height / 2};
rotate(&p1, rect->center, rect->angle);
rotate(&p2, rect->center, rect->angle);
rotate(&p3, rect->center, rect->angle);
rotate(&p4, rect->center, rect->angle);
rect->width = sqrt(pow(p2.x - p1.x, 2) + pow(p2.y - p1.y, 2));
rect->height = sqrt(pow(p4.x - p1.x, 2) + pow(p4.y - p1.y, 2));
}
int main() {
Rectangle rect = {{, }, 4, 2, M_PI / 4};
printf("Before rotation: center=(%.2f, %.2f), width=%.2f, height=%.2f, angle=%.2f\n",
rect.center.x, rect.center.y, rect.width, rect.height, rect.angle);
rotateRectangle(&rect);
printf("After rotation: center=(%.2f, %.2f), width=%.2f, height=%.2f, angle=%.2f\n",
rect.center.x, rect.center.y, rect.width, rect.height, rect.angle);
return ;
}
```
这个程序定义了一个 `Point` 结构体表示二维坐标点,定义了一个 `Rectangle` 结构体表示矩形,包括中心点、宽度、高度和旋转角度。程序还定义了一个 `rotate` 函数用于旋转一个点,和一个 `rotateRectangle` 函数用于旋转一个矩形。在 `main` 函数中,我们定义了一个矩形,然后调用 `rotateRectangle` 函数进行旋转,并输出旋转前后的矩形信息。