随机游走
1. 随机游走
简介:随机游走是一个最简单的运动模拟模型,是由一系列随机步骤构成的运动轨迹。
processing如何实现一个随机游走模型:
(1)建立一个随机游走类
随机游走类对象有以下特点:维持自身数据,比如位置;执行某些行为:绘制自身或者随机移动。
(2)定义随机游动行为
对象随机移动的可能情况:上、下、左、右
随机数产生:random()函数产生随机数,根据随机数的大小随机决定运动大小。
(3)一个简单的随机游走
通过以下三个步骤,则可以产生一个起点在屏幕中心的随机游走。
定义随机游走类,声明随机游走对象。
class Walker {
int x,y;
Walker() {
x = width/2;
y = height/2;
}
}
随机游走行为
int choice = int(random(4));
if (choice == 0) {
x++;
} else if (choice == 1) {
x--;
} else if (choice == 2) {
y++;
} else {
y--;
}
x = constrain(x,0,width-1);
y = constrain(y,0,height-1);
显示
void render() {
stroke(0);
point(x,y);
}
2. 概率和非均匀分布
(1)利用随机数判断概率的两种方式:
在数组中存放一组存好的数字,然后从数组中随机选择数值,数组中数值的分布决定了概率。
产生一个0-1的浮点随机数,判断随机数落在那个区间决定概率。
(2)随机游走和概率分布结合
例如:如下所示的随机游走有40%可能向右移动,这是采用了上述第二个方法,落在0-0.4区间的随机数将导致随机游走对象向右移动。
float r = random(1);
if (r < 0.4) {
x++;
} else if (r < 0.6) {
x--;
} else if (r < 0.8) {
y++;
} else {
y--;
}
(3)正态分布
正态分布特征:所有观察值都聚集在平均值附近。
产生正态分布:nextGaussian()函数默认以下面两个参数生成符合正态分布的随机数:平均值等于0,标准差等于1。如果我们需要一个平均值为320(宽度为640的窗口的正中位置),标准差为60像素的正态分布,可以简单地处理参数:将它乘以标准差并加上平均值。
3. 拓展与应用
(1)正态分布生成草坪上花朵分布的位置,随机数决定花朵的形态,使得花朵集中在中间位置。
NormaldistributionFlower(){
//产生正太分布数据
for(int i=0;i<mark.length;i++)
{
float xloc = randomGaussian();
float sd = 200; // 标准差
float mean = width/2; // 均值
xloc = ( xloc * sd ) + mean; // 用标准差和平均值调整高斯随机数
mark[i]=int(xloc);
}
getFlower();
//生成随机数
for(int i=0;i<mark.length;i++)
{
int j=int(random(flower.length));
type[i]=j;
}
}
(2)随机游走的使用:趋势朝向鼠标位置的随机游走,将此应用于蜜蜂。判断鼠标位置与蜜蜂位置x,y的差距,将大概率趋势作为朝向鼠标垫运动。
// 趋势朝向鼠标的随机游走
void step() {
int deltax=mouseX-int(position.x);
int deltay=mouseY-int(position.y);
float r = random(1);
// A 40% of moving to the mouse
if (r < 0.4)
{
if(deltax>0)
position.x+=steplength;
else
position.x-=steplength;
}
else if (r < 0.5)
{
if(deltax>0)
position.x-=steplength;
else
position.x+=steplength;
}
else if (r < 0.9)
{
if(deltay>0)
position.y+=steplength;
else
position.y-=steplength;
}
else
{
if(deltay>0)
position.y-=steplength;
else
position.y+=steplength;
}
position.x = constrain(position.x,0,width-1);
position.y = constrain(position.y,0,height-1);
}
4. 效果
实现在分布花朵的草坪上随机游走的蜜蜂,蜜蜂趋势朝向鼠标位置。可以看到花朵的位置分布主要集中在设置的平均值附近,蜜蜂在做随机游走运动,但趋势朝向鼠标。