《代码本色》习作实例编程
《代码本色》习作实例编程
一、第0章:随机游走类的概率分布
概况:参考0.1-0.3的示例,并结合练习0.1,练习0.3的要求,实现的可设定向鼠标移动或向屏幕右下移动趋势的Walker类。
实现:根据0.3节的内容,我们可以使用random(1)生成范围为(0,1)的浮点数r,然后通过判断其大小,来实现根据概率确定Walker类的移动趋势。
然后,我要确定我算法的基本流程,我想通过判断鼠标是否移动(或者说移动距离的多少=n)判断Walker的移动趋势是向鼠标移动还是向屏幕右下,然后再使用概率确定是否根据趋势移动,最终我通过改写step方法实现了所有功能,整体代码如下:
//if !mouse move out n point moveto downROright
void step(int n,float mouseRate,float unmouseRate){
if(mouseX-pmouseX>n||mouseY-pmouseY>n){
float r=random(1);
if(r<mouseRate){
if(mouseX-x==0||mouseY-y==0)return;
x+=(mouseX-x)/abs(mouseX-x);
y+=(mouseY-y)/abs(mouseY-y);
}
else{
x+=random(-1,1);
y+=random(-1,1);
}}
else{
float r=random(1);
if(r<unmouseRate){
x+=1;
y+=1;
}
else{
x+=random(-1,1);
y+=random(-1,1);
}
}
}//step
参数解释:
N——鼠标移动距离大小,如果为0,则表示鼠标移动则Walker移动趋势为跟随鼠标;
MouseRate——Walker跟随鼠标移动的概率
UnmouseRate——Walker向屏幕右下移动的趋势
执行函数与执行结果:
//main
Walker w;
void setup(){
size(640,360);
w=new Walker();
background(0);}
void draw(){
w.step(0,0.5,0.5);
w.