代码本色0章——Perlin噪声生成起伏地形

代码本色0章——Perlin噪声生成起伏地形

此博文依据代码本色第0章中的随机数与Perlin噪声运用写成,并观看了丹尼尔希夫曼关于perlin噪声的讲解,https://www.youtube.com/watch?v=D8UgRyRnvXU,大家可以看一看

参考案例

在这里插入图片描述在这里插入图片描述

效果图

在这里插入图片描述

Perlin噪声

一个好的随机数生成器能产生互不关联且毫无规律的随机数。跟我们前面看到的一样,一定程度的随机性有利于有机体和生命活动的建模。然而,单独把随机性作为唯一指导原则是不够的,它并不完全符合自然界的特征,Perlin噪声将这一点考虑在内了,此算法可用于生成各种自然特效,包括云层、地形和大理石纹理。
Perlin噪声算法表现出了一定的自然性,因为它能生成符合自然排序(“平滑”)的伪随机数序列。
processing内置了Perlin噪声算法的实现:noise()函数。noise()函数可以有1~3个参数,分别代表,一维,二维,三维的随机数。

在这里插入图片描述图(a)
在这里插入图片描述图(b)
图(a)为noise函数,图(b)为random函数可见noise函数更为光滑,没有图(b)中小球跳跃的感觉,可见,noise函数可以是的图形更加平滑和连续。

void setup()
 {
      
  size(400, 400); 
 }
float t=3;   
void draw()
   {
      
    background(255); 
    translate(100,100);    
    float n=map(noise(t),0,1,-100,100);   
    ellipse(n,180,16,16);  
    t+=0.1; 
   } 

此代码看起来很简单,但是切记需要用,map()函数来约束noise的范围,关于map函数可以在官网reference找到,这里就不解释了。

地形绘制

首先观察上面的图,会发现一下规律:
1.起伏的地形由很多三角形组成,且三角形大小相同;
2.地形起伏随机;
从图上我们只能看出这么多信息。下面我们来实践

三角形区域创建
在这里插入图片描述
//

首先,第一步,我们先生成多个小网格,首先就会想到用rect()函数,于是生成了上面,但是我们发现,如果是这样,生成三角形就会有困难,因为效果图中绘制的三角形并不在直线上,因此我们想到processing自带的vertex()函数,于是图形又成了这样
在这里插入图片描述

//

int cols,rows;
  int density=20; 
   void setup() 
   {
       
   size(600, 400);    
   int w=600;    
   int h=800;    
   cols=w/density
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值