写一个递归函数,画出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 20:03:26 浏览: 179
下面是一个递归函数,用于绘制koch分形雪花:
```
#include <graphics.h>
#include <math.h>
void DrawPolarLine(double r, double theta) {
double radians = theta / 180.0 * 3.1415926535;
line(getx(), gety(), getx() + r*cos(radians), gety() - r*sin(radians));
}
void DrawKochSnowflake(int order, double size) {
if (order == 0) {
DrawPolarLine(size, 0);
return;
}
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 gd = DETECT, gm;
initgraph(&gd, &gm, NULL);
int order;
double size;
printf("Enter the order of the Koch snowflake: ");
scanf("%d", &order);
printf("Enter the size of the initial triangle: ");
scanf("%lf", &size);
DrawKochSnowflake(order, size);
getch();
closegraph();
return 0;
}
```
这个程序使用了graphics.h图形库来绘制koch分形雪花,需要安装Borland C++编译器并设置好环境变量才能正常编译和运行。
在主程序中,首先读入koch分形雪花的阶数和初始三角形的边长,然后调用DrawKochSnowflake函数绘制koch分形雪花。DrawKochSnowflake函数中,如果阶数为0,直接绘制一个等边三角形;否则,递归绘制四个较小的koch分形雪花,并绘制连接它们的线段。注意,每个递归调用都会将阶数减1和初始三角形边长除以3。
DrawPolarLine函数用来绘制极坐标系下的线段,其中r和theta分别表示线段的长度和与x轴正方向的夹角。在该函数中,将theta转化为弧度制,并使用cos和sin函数计算出线段的终点坐标,然后使用graphics.h图形库中的line函数绘制线段。
阅读全文