混沌分形之谢尔宾斯基(Sierpinski)

本文以使用混沌方法生成若干种谢尔宾斯基相关的分形图形。

(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 = 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值