科赫曲线是一种分形。其形态似雪花,又称科赫雪花、雪花曲线.瑞典人科赫于1904年提出了著名的“雪花”曲线,这种曲线的作法是,从一个正三角形开始,把每条边分成三等份,然后以各边的中间长度为底边。分别向外作正三角形,再把“底边”线段抹掉,这样就得到一个六角形,它共有12条边。再把每条边三等份,以各中间部分的长度为底边,向外作正三角形后,抹掉底边线段。反复进行这一过程,就会得到一个“雪花”样子的曲线。这曲线叫做科赫曲线或雪花曲线。

给定线段AB,科赫曲线可以由以下步骤生成:
      (1)将线段分成三等份(AC,CD,DB)
      (2)以CD为底,向外(内外随意)画一个等边三角形DMC
      (3)将线段CD移去
      (4)分别对AC,CM,MD,DB重复1~3。
      反复进行这一作图过程,得到的曲线越来越精细。

  科赫曲线有着极不寻常的特性,不但它的周长为无限大,而且曲线上任两点之间的距离也是无限大。该曲线长度无限,却包围着有限的面积。很神奇的一个曲线,他说明了一个悖论:“无限长度包围着有限面积。”

程序中实现了0~8级的科赫雪花分形.程序设计时,将这9级曲线的顶点数据全部放置在一个内存中.并使用如下结构体进行设置:

    struct SnowLevel
{
Yuint vertexStart;
Yuint verticesCount;
};
SnowLevel m_snowLevels[SNOW_LEVELS_COUNT];
Yuint m_currentLevel;

分形图形的顶点生成算法代码如下:

static void Zhe(const Vector3& vStart, const Vector3& vEnd, Vector3* pVertices)
{
Vector3 vSub = vEnd - vStart; pVertices[] = vStart;
pVertices[] = vStart + vSub/;
pVertices[] = vStart + vSub*/;
pVertices[] = vEnd; Yreal alfa = atan2f(vSub.y, vSub.x);
alfa += YD_REAL_PI/; Yreal l = D3DXVec3Length(&vSub)/;
pVertices[].x = pVertices[].x + cosf(alfa)*l;
pVertices[].y = pVertices[].y + sinf(alfa)*l;
pVertices[].z = 0.0f;
} void CFractalSnowEntity::Fractal(Vector3* pVertices)
{
pVertices[].x = 0.0f;
pVertices[].y = YD_SNOW_RADIUS;
pVertices[].z = 0.0f; pVertices[].x = YD_SNOW_RADIUS*sinf(YD_REAL_PI/);
pVertices[].y = -YD_SNOW_RADIUS*sinf(YD_REAL_PI/);
pVertices[].z = 0.0f; pVertices[].x = -pVertices[].x;
pVertices[].y = pVertices[].y;
pVertices[].z = 0.0f; for (Yuint i = ; i < SNOW_LEVELS_COUNT; i++)
{
const Vector3* pSrc = pVertices + m_snowLevels[i - ].vertexStart;
Vector3* pDest = pVertices + m_snowLevels[i].vertexStart; Yuint c = m_snowLevels[i - ].verticesCount; for (Yuint j = ; j < c; j++)
{
Zhe(pSrc[j], pSrc[(j + )%c], pDest);
pDest += ;
}
}
}

下载地址:http://files.cnblogs.com/WhyEngine/FractalSnow.7z

科赫雪花第0级

科赫雪花第1级

科赫雪花第2级

科赫雪花第3级

科赫雪花第4级

科赫雪花第5级

科赫雪花第6级

科赫雪花第7级

科赫雪花第8级

软件使用说明
键盘0~8,分别设置第0级到第8级分形.
这是个3D程序,鼠标右键的拖动可以改变视角.
键盘X用于恢复为默认视角.
键盘F11用于全屏切换.

分形之科赫(Koch)雪花的更多相关文章

  1. python画图——雪花(科赫曲线)

    科赫曲线是一种分形,其形态非常像雪花,因此又被称作科赫雪花.雪花曲线. 下面是用python的turtle包让我们来实时画一个 import turtledef koch(t,n): #定义一个函数 ...

  2. 科赫曲线和科赫雪花的绘制Python

    #KochDrawV1.pyimport turtledef koch(size,n): if n == 0: turtle.fd(size) else: for angle in [0,60,-12 ...

  3. python: 递归函数(科赫雪花)

    import turtle as t def kehe(size,n): #递归函数 if n==0: t.fd(size) #阶数为0时,为一直线 else: for i in [0,60,-120 ...

  4. 海岸线、科赫曲线、turtle、递归

    本章绘图要点: turtle模块:python标准库自带的一个模块,可用来绘制二维图形.该模块封装了底层的数据处理逻辑,向外提供了更符合手工绘图习惯的接口函数,适用于绘制对质量.精度要求不高的图形. ...

  5. koch曲线与koch雪花的MATLAB实现

    代码 % -- function koch(Ax, Ay, Bx, By) % 控制递归深度 Deepth = ; % 控制图画大小 Size = ; + (By-Ay)^) < Deepth ...

  6. 科赫雪花利用python海龟绘图代码

    #KochDraw.py import turtle //海龟绘图 def koch(size, n): if n == 0: turtle.fd(size) else: for angle in [ ...

  7. pyinstaller库的简单使用 打包科赫雪花几何图形

    pyinstaller 简单使用 (cmd命令行) pyinstaller -F <文件名.py> Pyinstaller库常用参数 参数 描述 -h 查看帮助 --clean 清理打包过 ...

  8. 分形之拆分三角形(Split Triangle)

    前面讲了谢尔宾斯基三角形,它是不停地将一个三角形拆分三个与之相似的三角形.这一节给大家展示的图形是将一个等腰钝角三角形不停地拆分两个与之相似的三角形. 核心代码: static void SplitT ...

  9. 18个分形图形的GIF动画演示

    这里提供18个几何线段分形的GIF动画图像.图形颜色是白色,背景色为黑色,使用最基本的黑与白以表现分形图形. (1)科赫(Koch)雪花   (2)列维(levy)曲线   (3)龙形曲线(Drago ...

随机推荐

  1. C++动态链接库

    1.动态链接库概述: 动态链接库通常都不能直接运行,也不能接受消息:只有在其他模块调用动态链接库中的函数时,它才发挥作用. Windows API中所有的函数都包含在动态链接库中. 动态链接库分静态库 ...

  2. android DatagramSocket send 发送数据出错

    安卓4.0以后好像不能在主线程里面使用 socket 所以不管是发送数据还是接收数据需要新开一个了线程: 以下代码是我点击发送是代码: new Thread(new Runnable() { @Ove ...

  3. 找不到类SimpleJdbcTemplate ParameterizedRowMapper cannot be resolved

    找不到类SimpleJdbcTemplate 背景 想编译个web应用,原来spring-jdbc.jar用的是Spring 3.1,今天改成用Spring 4.3,报了这个错误. 现象 编译不通过, ...

  4. oracle导出expdp导入impdp

    conn sys/password as sysdba;创建用户test1CREATE USER test1 IDENTIFIED BY "pass1";GRANT CONNECT ...

  5. windows 8 update to windows 8.1

    可以参考以下几个链接: http://blogs.windows.com/windows/b/appbuilder/archive/2013/07/24/windows-8-to-windows-8- ...

  6. centos6 搭建nginx实现负载均衡

    一.安装nginx 1)准备2台服务器,环境一样,同时执行 rpm -ivh http://mirrors.aliyun.com/epel/epel-release-latest-6.noarch.r ...

  7. Maven手动将jar包放入本地仓库

    mvn install:install-file -Dfile=jar包的位置 -DgroupId=上面的groupId -DartifactId=上面的artifactId -Dversion=上面 ...

  8. 2019.01.20 bzoj3784: 树上的路径(二分答案+点分治)

    传送门 点分治好题. 题意简述:给一棵带边权的树,问所有路径中前mmm大的.m≤300000m\le300000m≤300000 思路: 网上有题解写了可以通过什么点分治序转化成超级钢琴那道题的做法蒟 ...

  9. 2019.01.19 codeforces896C.Willem, Chtholly and Seniorious(ODT)

    传送门 ODTODTODT出处(万恶之源) 题目简述: 区间赋值 区间加 区间所有数k次方和 区间第k小 思路:直接上ODTODTODT. 不会的点这里 代码: #include<bits/st ...

  10. 2019.01.06 vijos lxhgww的奇思妙想(长链剖分)

    传送门 长链剖分模板题. 题意简述:允许O(nlogn)O(nlog_n)O(nlogn​)预处理,让你支持O(1)O(1)O(1)查找任意一个点的kkk级祖先. 思路:因为要O(1)O(1)O(1) ...