yw80

分享代码,一起学习进步~

[分形学] 基于 L 系统绘制 Hilbert (希尔伯特) 曲线

德国数学家 David Hilbert 发现了这样一种可以填满整个单位正方形的分形曲线,称它为 Hilbert 曲线。具体的我就不多做介绍了,相关内容请自己搜索。这里只说程序。 程序执行后,按数字键 1~8 可以显示相应阶数的 Hilbert (希尔伯特) 曲线,按 ESC 退出。 五阶 Hilbert (希尔伯特) 曲线的执行效果如下: 完整的程序源码如下: // 程序名称:Hilbert (希尔伯特)曲线 (基于 L 系统绘制) // 编译环境:Visual C++ 6.0,EasyX 2011惊蛰版 // 最后修改:2011-3-7 // #include <graphics.h> #include <conio.h> int g_len; // Hilbert 曲线的单位长度 // 递归绘制 Hilbert 曲线 void hilbert(LPCTSTR cmd, int level) { static BYTE d = 0; // 方向 static POINT c[4] = {1, 0, 0, -1, -1, 0, 0, 1}... [更多...]

[分形学] 谢宾斯基 (Sierpinski) 三角形,也叫垫片

先说一个程序的实现过程: 随机生成 3 个点 P[0]、P[1]、P[2]; 随机生成 1 个点 P; 绘制点 P; 随机生成 [0, 2] 内的整数 n; 令 P = P 与 P[n] 的中点; 重复执行步骤 (3)~(5) 三万次。 这个程序很简单,虽然随机性很大,但是结果几乎是完全相似的,会是一个很有趣的图案,也就是传说中的谢宾斯基三角形。以上步骤就是生成谢宾斯基三角形的随机迭代法。 程序代码如下: (注:为了效果,将步骤(1)的三个点手动指定了。喜欢的话,可以将其修改为随机产生) // 程序名称:谢宾斯基(Sierpinski)三角形,也叫垫片 // 编译环境:Visual C++ 6.0,EasyX 2011惊蛰版 // 最后更新:2010-11-16 // #include <graphics.h> #include <conio.h> #include <time.h> void main() { srand((unsigned)time(NULL)); // 设置随机种子 POINT P[3] = {{320, 5... [更多...]

[分形学] 可以无穷放大的 Mandelbrot Set (曼德布洛特集) VC 源代码

基于上篇文章 Mandelbrot Set (曼德布洛特集) 的源代码:http://www.codebus.cn/yw80/post/mandelbrot-set 我修改了几个地方: 1. 修改了颜色,使用黑->蓝->白->棕->黑这样的渐变颜色方案(当然,大家可以修改 InitColor() 函数改变配色方案) 2. 增加了放大鼠标选中区域的功能。按鼠标中键可以恢复原尺寸。 3. 将迭代次数提了出来,定义了常量。如果需要绘制更精细的图,请加大常量 ITERATIONS。不过越大绘制的越慢。精细程度开始看不出来,放大次数多了就明显了。 4. 理论上是可以无穷放大,但实际受 double 类型精度的影响,放大到一定程度就会是马赛克了。 先看看逐步放大的效果吧: 另一个位置的逐步放大效果: 完整的 VC 源代码如下: // 程序名称:分形学 - 可以无穷放大的 Mandelbrot Set (曼德布洛特集) // 编译环境:Visual C++ 6.0,EasyX 2011惊蛰版 // 最后更新:2010-9-9 // #include <graphic... [更多...]