目录
一 什么是KOCH曲线
二 KOCH曲线的性质
三 KOCH曲线算法思路
四 KOCH曲线的应用
五 KOCH曲线生成的部分代码
一 什么是KOCH曲线
科克曲线(Koch curve)是一种典型的分形曲线。它是科克(Koch,H.von)于1904年构造出来的。
一个边长为1的等边三角形,取每边中间的三分之一,接上去一个形状完全相似的但边长为其三分之一的三角形,结果是一个六角形。取六角形的每个边做同样的变换,即在中间三分之一接上更小的三角形,以此重复,直至无穷。外界的变得原来越细微曲折,形状接近理想化的雪花。
二 KOCH曲线的性质
1、它是一条连续的回线,永远不会自我相交。
2、它是一个无限构造的有限表达,每次变化面积都会增加,但是总面积是有限的,不会超过初始三角形的外接圆。
3、曲线是无限长的,即在有限空间里的无限长度。
4、它拥有自相似性,即将它放大之后会看到一个小的KOCH曲线。
三 KOCH曲线算法思路
1、把一条直线等分成三段,将中间一段用夹角为60°的二条等长(1/3)的折线来代替,形成一个生成单元。
2、把每一条直线段用生成单元进行代替,经过无穷多次迭代后就呈现一条无穷多弯曲的KOCH曲线。
四 KOCH曲线的应用
1、模拟自然界中的海岸线。
2、研究自相似性。
3、用于分形图像压缩。
五 KOCH曲线生成的部分代码
//自定义直线AB长度float l = (float)Math.Sqrt((bx - ax) * (bx - ax) + (by - ay) * (by - ay)); float l_3 = l / 3; //AC,CD,DB长float cx, cy, dx, dy, ex, ey;cx = ax + (bx - ax) / 3; cy = ay + (by - ay) / 3;dx = bx - (bx - ax) / 3; dy = by - (by - ay) / 3;// *180 / Math.PI;float PI = (float)Math.Atan((dy - cy) / (dx - cx));if ((PI >= 0 && dy - cy < 0) || (PI < 0 && (dx - cx) < 0)){ PI = PI + (float)Math.PI; }ex = cx + (float)Math.Cos(PI + (Math.PI / 3)) * l_3;ey = cy + (float)Math.Sin(PI + (Math.PI / 3)) * l_3;Draw(ax, ay, cx, cy);Draw(dx, dy, bx, by);Clear(cx, cy, dx, dy);Draw(ex, ey, cx, cy);Draw(dx, dy, ex, ey);KOCH(depth - 1, ax, ay, cx, cy);KOCH(depth - 1, cx, cy, ex, ey);KOCH(depth - 1, ex, ey, dx, dy);KOCH(depth - 1, dx, dy, bx, by);return null;
(Draw、Clear、KOCH为封装好的函数)