写一个递归函数,画出koch分形雪花,使用第7章的图形库在屏幕上显示这个图形。你的主程序应该读人你想生成的分形的阶数,以及原0阶三角形的边长。在写这个程序时,你最好定义一个过程DrawPolarLine,让它画一条长为r,角度为theta的边,该角度是从x轴逆时针方向转过的度数,如Draw Arc的角那,实现如下: static void DrawPolarLine(double r,double theta) double radians; radians m theta / 180 * 3.1415926535;DrawLine(r * cos(radians),r * sin(radians)); DrawPolarLine这个名字来自数学概念中的极坐标 (polar coordinate),极坐标由半径r和角theta确定 C语言
时间: 2023-06-24 21:07:34 浏览: 79
C通过运行时堆栈支持递归函数的实现。递归函数就是直接或间接调用自身的函数。
#include <graphics.h>
#include <math.h>
void DrawPolarLine(double r, double theta) {
double radians = theta / 180.0 * 3.1415926535;
// 将角度转换为弧度
line(0, 0, r * cos(radians), r * sin(radians));
// 从原点开始画线
}
void DrawKochSnowflake(int order, double size) {
if (order == 0) {
DrawPolarLine(size, 0);
DrawPolarLine(size, 120);
DrawPolarLine(size, -120);
// 画出0阶三角形
} else {
DrawKochSnowflake(order - 1, size / 3);
// 递归画出左边的线段
DrawPolarLine(size / 3, 60);
DrawKochSnowflake(order - 1, size / 3);
// 递归画出上部的线段
DrawPolarLine(size / 3, -120);
DrawKochSnowflake(order - 1, size / 3);
// 递归画出下部的线段
DrawPolarLine(size / 3, 60);
DrawKochSnowflake(order - 1, size / 3);
// 递归画出右边的线段
}
}
int main() {
int order;
double size;
printf("请输入分形的阶数:");
scanf("%d", &order);
printf("请输入三角形的边长:");
scanf("%lf", &size);
initwindow(800, 600);
// 初始化窗口
DrawKochSnowflake(order, size);
// 画出分形雪花
getch();
closegraph();
// 关闭窗口
return 0;
}
阅读全文