koch算法c语言递归,递归写Koch雪花的算法有哪些?

本文介绍了如何使用递归函数绘制Koch雪花,这是一种基于Koch曲线的几何形状。通过调整递归深度n,可以实现Koch曲线的多次迭代,形成复杂的雪花图案。代码示例展示了如何用OpenGL绘制Koch曲线,并解释了参数的意义和作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

满意答案

dcebd7a0de6265b6ccae5ead692f1eab.png

syee093417

推荐于 2019.11.15

dcebd7a0de6265b6ccae5ead692f1eab.png

采纳率:58%    等级:7

已帮助:259人

现在绘制3条Koch曲线就构成了Koch雪花。

kochCurve(x0, y0, angle, length, n);

x0 += length*cos(angle);

y0 += length*sin(angle);

angle -= pi*2/3;

kochCurve(x0, y0, angle, length, n);

x0 += length*cos(angle);

y0 += length*sin(angle);

angle -= pi*2/3;

kochCurve(x0, y0, angle, length, n);

下一次的迭代同样要用到这样的方法,所以我们可以把这些代码放倒kochCurve函数中。于是kochCurve成了一个递归函数。

为了控制递归的深度,我们需要给kochCurve添加一个参数n。

void kochCurve(double x0, double y0, double angle, double length, int n)

{

if(n == 0) {

double x1 = x0 + length*cos(angle);

double y1 = y0 + length*sin(angle);

glBegin(GL_LINES);

glVertex2d(x0, y0);

glVertex2d(x1, y1);

glEnd();

}

else {

length /= 3;

n --;

kochCurve(x0, y0, angle, length, n);

x0 += length*cos(angle);

y0 += length*sin(angle);

angle += pi/3;

kochCurve(x0, y0, angle, length, n);

x0 += length*cos(angle);

y0 += length*sin(angle);

angle -= pi*2/3;

kochCurve(x0, y0, angle, length, n);

x0 += length*cos(angle);

y0 += length*sin(angle);

angle += pi/3;

kochCurve(x0, y0, angle, length, n);

}

}

n是函数递归的层数,也是Koch曲线迭代的次数。

kochCurve(x0, y0, angle, length, 0)画出的是初始的图形

kochCurve(x0, y0, angle, length, 1)画出第一次迭代

下面是n = 2, 3, 4, 5的结果。

这里用线段的起点(x0, y0),方向(和正向x轴之间的角度)及长度来描述一条线段。

绘制一条从(-1.0, 0.0)到(1.0, 0.0)的Koch曲线用下面的方法:

double length = 2.0;

double angle = 0.0;

double x0 = -1.0;

double y0 = 0.0;

kochCurve(x0, y0, angle, length);

一条Koch曲线是由4条比例缩写为整体1/3的Koch曲线组成。

length = 2.0/3;

kochCurve(x0, y0, angle, length);

x0 += length*cos(angle);

y0 += length*sin(angle);

angle += pi/3;

kochCurve(x0, y0, angle, length);

x0 += length*cos(angle);

y0 += length*sin(angle);

angle -= pi*2/3;

kochCurve(x0, y0, angle, length);

x0 += length*cos(angle);

y0 += length*sin(angle);

angle += pi/3;

kochCurve(x0, y0, angle, length);

这样就画出了第一次迭代的结果。

理论上说,Koch曲线是由无数无限短的线段组成。绘图的时候当然不可能画出无限短的线段。所以我们根据要求,用若干线段组成。

首先,绘制构造Koch曲线的初始图形,也就是一条直线。

void kochCurve(double x0, double y0, double angle, double length)

{

double x1 = x0 + length*cos(angle);

double y1 = y0 + length*sin(angle);

glBegin(GL_LINES);

glVertex2d(x0, y0);

glVertex2d(x1, y1);

glEnd();

}

00分享举报

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值