KOCH曲线介绍

目录

一 什么是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为封装好的函数)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值