本文以使用混沌方法生成若干种谢尔宾斯基相关的分形图形。
(1)谢尔宾斯基三角形
给三角形的3个顶点,和一个当前点,然后以以下的方式进行迭代处理:
a.随机选择三角形的某一个顶点,计算出它与当前点的中点位置;
b.将计算出的中点做为当前点,再重新执行操作a
相关代码如下:
class SierpinskiTriangle : public FractalEquation
{
public:
SierpinskiTriangle()
{
m_StartX = 0.0f;
m_StartY = 0.0f;
m_StartZ = 0.0f;
m_triangleX[0] = 0.0f;
m_triangleY[0] = FRACTAL_RADIUS;
m_triangleX[1] = FRACTAL_RADIUS*sinf(PI/3);
m_triangleY[1] = -FRACTAL_RADIUS*sinf(PI/6);
m_triangleX[2] = -m_triangleX[1];
m_triangleY[2] = m_triangleY[1];
}
void IterateValue(float x, float y, float z, float%26amp; outX, float%26amp; outY, float%26amp; outZ) const
{
int r = rand()%3;
outX = (x + m_triangleX[r])*0.5f;
outY = (y + m_triangleY[r])*0.5f;
outZ = z;
}
private:
float m_triangleX[3];
float m_triangleY[3];
};
关于基类FractalEquation的定义见:混沌与分形
最终生成的图形为:
通过这一算法可以生成如下图像:
(2)谢尔宾斯基矩形
既然能生成三角形的图形,那么对于矩形会如何呢?尝试下吧:
class SierpinskiRectangle : public FractalEquation
{
public:
SierpinskiRectangle()
{
m_StartX =