计算机图形学平移旋转缩放实验 c 程序完整代码
时间: 2023-09-03 13:05:50 浏览: 47
以下是一个简单的计算机图形学平移旋转缩放实验 C 程序的完整代码,仅供参考:
```c
#include <graphics.h>
#include <conio.h>
#include <math.h>
#define PI 3.14159265
void draw_rect(int x1, int y1, int x2, int y2) {
rectangle(x1, y1, x2, y2);
}
void rotate_rect(int x1, int y1, int x2, int y2, int angle) {
int midx = (x1 + x2) / 2;
int midy = (y1 + y2) / 2;
double radian = angle * PI / 180.0;
int new_x1 = round((x1 - midx) * cos(radian) - (y1 - midy) * sin(radian)) + midx;
int new_y1 = round((x1 - midx) * sin(radian) + (y1 - midy) * cos(radian)) + midy;
int new_x2 = round((x2 - midx) * cos(radian) - (y2 - midy) * sin(radian)) + midx;
int new_y2 = round((x2 - midx) * sin(radian) + (y2 - midy) * cos(radian)) + midy;
draw_rect(new_x1, new_y1, new_x2, new_y2);
}
void scale_rect(int x1, int y1, int x2, int y2, double scale) {
int midx = (x1 + x2) / 2;
int midy = (y1 + y2) / 2;
int new_x1 = round(x1 * scale + midx * (1 - scale));
int new_y1 = round(y1 * scale + midy * (1 - scale));
int new_x2 = round(x2 * scale + midx * (1 - scale));
int new_y2 = round(y2 * scale + midy * (1 - scale));
draw_rect(new_x1, new_y1, new_x2, new_y2);
}
void translate_rect(int x1, int y1, int x2, int y2, int dx, int dy) {
draw_rect(x1 + dx, y1 + dy, x2 + dx, y2 + dy);
}
int main() {
int gd = DETECT, gm;
initgraph(&gd, &gm, "");
draw_rect(100, 100, 200, 200); // 绘制矩形
delay(2000); // 延迟 2 秒
cleardevice(); // 清屏
rotate_rect(100, 100, 200, 200, 45); // 旋转 45 度
delay(2000);
cleardevice();
scale_rect(100, 100, 200, 200, 0.5); // 缩小一半
delay(2000);
cleardevice();
translate_rect(100, 100, 200, 200, 50, 50); // 平移 50 个单位
getch();
closegraph();
return 0;
}
```
在此代码中,draw\_rect、rotate\_rect、scale\_rect 和 translate\_rect 分别代表绘制矩形、旋转矩形、缩放矩形和平移矩形的函数。在 main 函数中,我们依次调用这些函数进行绘制、变换和清屏等操作。注意,在使用旋转和缩放函数时,需要先计算出变换后的坐标。