分形之科赫(Koch)雪花
科赫曲线是一种分形。其形态似雪花,又称科赫雪花、雪花曲线.瑞典人科赫于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[0] = vStart; pVertices[1] = vStart + vSub/3; pVertices[3] = vStart + vSub*2/3; pVertices[4] = vEnd; Yreal alfa = atan2f(vSub.y, vSub.x); alfa += YD_REAL_PI/3; Yreal l = D3DXVec3Length(&vSub)/3; pVertices[2].x = pVertices[1].x + cosf(alfa)*l; pVertices[2].y = pVertices[1].y + sinf(alfa)*l; pVertices[2].z = 0.0f; } void CFractalSnowEntity::Fractal(Vector3* pVertices) { pVertices[0].x = 0.0f; pVertices[0].y = YD_SNOW_RADIUS; pVertices[0].z = 0.0f; pVertices[1].x = YD_SNOW_RADIUS*sinf(YD_REAL_PI/3); pVertices[1].y = -YD_SNOW_RADIUS*sinf(YD_REAL_PI/6); pVertices[1].z = 0.0f; pVertices[2].x = -pVertices[1].x; pVertices[2].y = pVertices[1].y; pVertices[2].z = 0.0f; for (Yuint i = 1; i < SNOW_LEVELS_COUNT; i++) { const Vector3* pSrc = pVertices + m_snowLevels[i - 1].vertexStart; Vector3* pDest = pVertices + m_snowLevels[i].vertexStart; Yuint c = m_snowLevels[i - 1].verticesCount; for (Yuint j = 0; j < c; j++) { Zhe(pSrc[j], pSrc[(j + 1)%c], pDest); pDest += 4; } } }
下载地址:https://files.cnblogs.com/WhyEngine/FractalSnow.7z
科赫雪花第0级
科赫雪花第1级
科赫雪花第2级
科赫雪花第3级
科赫雪花第4级
科赫雪花第5级
科赫雪花第6级
科赫雪花第7级
科赫雪花第8级
软件使用说明
键盘0~8,分别设置第0级到第8级分形.
这是个3D程序,鼠标右键的拖动可以改变视角.
键盘X用于恢复为默认视角.
键盘F11用于全屏切换.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· 展开说说关于C#中ORM框架的用法!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?