(MIT 6.837)迭代函数系统IFS画自相似图形的算法

本文介绍IFS算法原理及实现,通过随机选取变换矩阵来生成自相似图形,并附带核心代码片段。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

     自然界中有很多图形具有自相似性:即图形的一部分与整个图形具有一样的形状。如下面几张图:

          

IFS算法的主要思想是随机生成很多个点,对每一个点,随机在所有可能的transform(用一个矩阵表示)中取一个,对点进行变换(其实是一个伸缩+平移变换之和)。

如下:

for "lots" of random points (x0, y0)      

      for k=0 to num_iters           

         pick a random transform fi          

            (xk+1, yk+1) = fi(xk, yk)      

display a dot at (xk, yk)

 

下面贴出其核心代码:

void IFS::RenderIFS(Image *image, const int &num_points, const int &num_iters)
{
	int width = image->Width(), height = image->Height();
	for(int i=1; i<=num_points; i++)
	{
	   Vec2f V = Vec2f(rand()/(RAND_MAX+0.0), rand()/(RAND_MAX+0.0));
	   for(int k=0;k<num_iters;k++)
           {
               float p = rand()/(RAND_MAX+0.0);		
	       float sum = 0;
	       int j = 0;
		  for(j=0;j< n;j++)
                    {
                      sum += probability[j];
                      if( p <= sum)		
                          break;
                    }
	       m[j].Transform(V);
           }
      if(V.x()>=0 && V.x()<=1 && V.y()>=0 &&V.y()<=1)
           image->SetPixel(V.x()*width, V.y()*height, Vec3f(0,1,0));
      }
}

链接为完整程序的下载:(该程序也是MIT6.837计算机图形学公开课assignment0的答案)

http://download.youkuaiyun.com/detail/qwert1122332211/6567091

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值