[分形学] 谢宾斯基 (Sierpinski) 三角形,也叫垫片
2010-11-16 ~ 2018-11-1
(0)
先说一个程序的实现过程:
- 随机生成 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, 50}, {120, 400}, {520, 400}}; // 设定三角形的三个顶点
POINT p = {rand() % 640, rand() % 480}; // 随机产生当前点
// 初始化图形模式
initgraph(640, 480);
// 绘制三万个点
int n;
for(int i = 0; i <= 30000; i++)
{
n = rand() % 3;
p.x = (p.x + P[n].x) / 2;
p.y = (p.y + P[n].y) / 2;
putpixel(p.x, p.y, GREEN);
}
// 按任意键退出
getch();
closegraph();
}
执行效果要贴图就没意思了。不妨先猜想一下,会是个什么图案?
添加评论
取消回复