最近在学习MIT的图形学课程,开一个新的系列记录一下~
第一个作业是迭代函数系统,也称作分形,通过对随机均匀分布的大量点进行迭代的变换,得到具有一定重复性特征的图形
目录
原理
迭代函数系统存在自相似性,每个分形系统的图片都可以由n组仿射变换来描述。
一个系统有朝某个稳态发展的趋势,这个稳态就叫做吸引子。对于分形系统,系统最终稳定的吸引子是一个确定的点,吸引子的中的各个元素是吸引子的变换形式,这些吸引子经过不同的变换聚合在一起就成了最终稳定态的吸引子,即。
伪代码
代码部分比较简单:
1、生成大量随机点,遍布整个画布
2、对于0-迭代次数
2.1、对每一个点,随机选择一个事先规定的变换方式
2.2、记录变换后的坐标,成为新的点
3、显示当前所有点
实现难点
我是用C++编写的代码,具体实现有一个问题,即当前变换坐标后的点有可能超出了原本设置好的画布大小(如果提前设置了画布的话),这时需要对x、y坐标的最小、最大值进行判断和变换,将之填充在画布上。
部分结果
github链接
GitHub - A-pril/Graphics-6.837: MIT Graphics learning record