用 C 语言绘制函数曲线271


函数曲线是一种由数学方程定义的几何图案。通过将方程翻译成计算机代码,我们可以用编程语言绘制这些曲线。在本教程中,我们将使用 C 语言绘制两个常见的函数曲线:科赫雪花和希尔伯特曲线。

科赫雪花

科赫雪花是由一系列分形迭代生成的。每个迭代都将前一个阶段的每条线段分为三段,并在中间段上添加一个角形的突出部分。代码如下:```c
#include
#include
// 计算给定角度的正弦和余弦
void sincos(double angle, double *sin, double *cos) {
*sin = sin(angle);
*cos = cos(angle);
}
// Koch 雪花曲线绘制函数
void koch(double x1, double y1, double x2, double y2, int level) {
double dx = x2 - x1, dy = y2 - y1;
double length = sqrt(dx * dx + dy * dy);
double angle = atan2(dy, dx);
double sin30, cos30;
sincos(angle + M_PI / 3, &sin30, &cos30);
if (level == 0) {
// 绘制线段
printf("drawLine(%lf, %lf, %lf, %lf)", x1, y1, x2, y2);
} else {
// 递归调用
double x3 = x1 + dx / 3, y3 = y1 + dy / 3;
double x4 = x3 + (x2 - x3) * cos30 - (y2 - y3) * sin30;
double y4 = y3 + (x2 - x3) * sin30 + (y2 - y3) * cos30;
double x5 = x2 - dx / 3, y5 = y2 - dy / 3;
koch(x1, y1, x3, y3, level - 1);
koch(x3, y3, x4, y4, level - 1);
koch(x4, y4, x5, y5, level - 1);
}
}
// 主函数
int main() {
// 设置初始参数
double x1 = 0, y1 = 0, x2 = 200, y2 = 200;
int level = 3;
// 绘制科赫雪花
koch(x1, y1, x2, y2, level);
return 0;
}
```

希尔伯特曲线

希尔伯特曲线是一种空间填充曲线,它遍历一个 2^n x 2^n 正方形网格中的所有点。通过递归定义,它由四个较小的希尔伯特曲线组成,这些曲线按顺时针方向旋转 90 度并连接在一起。代码如下:```c
#include
// 希尔伯特曲线绘制函数
void hilbert(int order, int x1, int y1, int x2, int y2, int dir) {
if (order == 0) {
// 绘制线段
printf("drawLine(%d, %d, %d, %d)", x1, y1, x2, y2);
} else {
int dx = x2 - x1, dy = y2 - y1;
int half_dx = dx / 2, half_dy = dy / 2;
// 递归调用
switch (dir) {
case 0: // 右下
hilbert(order - 1, x1, y1, x1 + half_dx, y1 + half_dy, 0);
hilbert(order - 1, x1 + half_dx, y1 + half_dy, x1 + half_dx, y1 + dy, 3);
hilbert(order - 1, x1 + half_dx, y1 + dy, x2, y2, 2);
hilbert(order - 1, x2, y2, x2, y1 + half_dy, 1);
break;
case 1: // 左上
hilbert(order - 1, x1, y1, x1 + half_dx, y1 + half_dy, 1);
hilbert(order - 1, x1 + half_dx, y1 + half_dy, x2, y1 + half_dy, 2);
hilbert(order - 1, x2, y1 + half_dy, x2, y2, 3);
hilbert(order - 1, x2, y2, x1 + half_dx, y2, 0);
break;
case 2: // 左下
hilbert(order - 1, x1, y2, x1 + half_dx, y1 + half_dy, 2);
hilbert(order - 1, x1 + half_dx, y1 + half_dy, x1 + half_dx, y2, 1);
hilbert(order - 1, x1 + half_dx, y2, x2, y2, 0);
hilbert(order - 1, x2, y2, x2, y1 + half_dy, 3);
break;
case 3: // 右上
hilbert(order - 1, x2, y1, x1 + half_dx, y1 + half_dy, 3);
hilbert(order - 1, x1 + half_dx, y1 + half_dy, x1 + half_dx, y1, 0);
hilbert(order - 1, x1 + half_dx, y1, x2, y1, 1);
hilbert(order - 1, x2, y1, x2, y1 + half_dy, 2);
break;
}
}
}
// 主函数
int main() {
// 设置初始参数
int order = 4;
int x1 = 0, y1 = 0, x2 = 200, y2 = 200;
// 绘制希尔伯特曲线
hilbert(order, x1, y1, x2, y2, 0);
return 0;
}
```

使用 C 语言绘制函数曲线是一个有趣且富有教育意义的项目。通过理解曲线背后的数学方程并将其翻译成代码,我们可以生成复杂的几何图案。本文介绍的科赫雪花和希尔伯特曲线只是众多函数曲线中的一小部分示例,还有许多其他类型的曲线可供探索。

2024-12-06


上一篇:C语言函数名、参数和函数签名

下一篇:C语言函数声明位置