用c++写一个程序,调用easyx库,要求绘制网格状贝塞尔曲面
时间: 2023-06-12 11:06:23 浏览: 121
以下是一个使用 EasyX 绘制网格状贝塞尔曲面的 C 语言程序:
```c
#include <graphics.h>
#include <conio.h>
#include <math.h>
#define ROWS 8 // 曲面行数
#define COLS 8 // 曲面列数
#define WIDTH 640 // 窗口宽度
#define HEIGHT 480 // 窗口高度
int main()
{
initgraph(WIDTH, HEIGHT); // 初始化图形窗口
// 定义曲面控制点坐标数组
POINT pts[ROWS][COLS] = {
{ { 0, 0 }, { 100, 0 }, { 200, 0 }, { 300, 0 }, { 400, 0 }, { 500, 0 }, { 600, 0 }, { 640, 0 } },
{ { 0, 100 }, { 100, 100 }, { 200, 100 }, { 300, 100 }, { 400, 100 }, { 500, 100 }, { 600, 100 }, { 640, 100 } },
{ { 0, 200 }, { 100, 200 }, { 200, 200 }, { 300, 200 }, { 400, 200 }, { 500, 200 }, { 600, 200 }, { 640, 200 } },
{ { 0, 300 }, { 100, 300 }, { 200, 300 }, { 300, 300 }, { 400, 300 }, { 500, 300 }, { 600, 300 }, { 640, 300 } },
{ { 0, 400 }, { 100, 400 }, { 200, 400 }, { 300, 400 }, { 400, 400 }, { 500, 400 }, { 600, 400 }, { 640, 400 } },
{ { 0, 480 }, { 100, 480 }, { 200, 480 }, { 300, 480 }, { 400, 480 }, { 500, 480 }, { 600, 480 }, { 640, 480 } },
{ { 0, 640 }, { 100, 640 }, { 200, 640 }, { 300, 640 }, { 400, 640 }, { 500, 640 }, { 600, 640 }, { 640, 640 } },
{ { 0, 800 }, { 100, 800 }, { 200, 800 }, { 300, 800 }, { 400, 800 }, { 500, 800 }, { 600, 800 }, { 640, 800 } },
};
// 绘制控制网格
setcolor(LIGHTGRAY);
for (int i = 0; i < ROWS; i++) {
for (int j = 0; j < COLS; j++) {
if (j > 0) {
line(pts[i][j - 1].x, pts[i][j - 1].y, pts[i][j].x, pts[i][j].y);
}
if (i > 0) {
line(pts[i - 1][j].x, pts[i - 1][j].y, pts[i][j].x, pts[i][j].y);
}
}
}
// 绘制曲面
setcolor(YELLOW);
for (double u = 0; u < 1; u += 0.05) {
for (double v = 0; v < 1; v += 0.05) {
// 计算网格上点的坐标
double x = 0, y = 0, z = 0;
for (int i = 0; i < ROWS; i++) {
for (int j = 0; j < COLS; j++) {
double b1 = pow(1 - u, 3) * pow(u, i) * pow(1 - v, 3) * pow(v, j);
double b2 = pts[i][j].x;
double b3 = pts[i][j].y;
x += b1 * b2;
y += b1 * b3;
}
}
// 绘制点
putpixel((int)x, (int)y, YELLOW);
}
}
getch(); // 等待用户按键,防止窗口关闭
closegraph(); // 关闭图形窗口
return 0;
}
```
这个程序使用了一个 8x8 的控制点矩阵来定义曲面,然后通过计算网格上的点坐标来绘制曲面。在绘制曲面之前,程序先绘制了控制网格以便于调试和查看曲面的形状。
阅读全文