隨機游走
假設(shè)你站在一根平衡木中間,每10秒鐘拋一枚硬幣:如果硬幣正面朝上,你向前走一步;如果背面朝上,則向后走一步。這就是隨機游走——由一些列隨機步驟構(gòu)成的運動軌跡。從平衡木下來站到地面上,你就可以做二維隨機游走了,不過每走一步需要拋兩次硬幣,而且需要按照以下規(guī)則移動:
第一次拋擲 | 第二次拋擲 | 結(jié) 果 |
正面 | 正面 | 向前走一步 |
正面 | 反面 | 向右走一步 |
反面 | 正面 | 向左走一步 |
反面 | 反面 | 向后走一步 |
是的,這是一個很簡單的算法,但隨機游走可以對現(xiàn)實世界的各種現(xiàn)象建模:從氣體分子的運動到賭徒一整天的賭博活動不一而足。
編程模擬
首先,定義一個Walker類,它只需要兩部分數(shù)據(jù)——x坐標和y坐標。
每個類都需要有一個構(gòu)造函數(shù),構(gòu)造函數(shù)是特殊的函數(shù),每次創(chuàng)建對象的時候都會被調(diào)用:
除了數(shù)據(jù),我們還可以在類中定義功能函數(shù)。此處我們實現(xiàn)一個擁有顯示自身的函數(shù)(畫一個圓):
第二個函數(shù)擁有控制對象的下一步移動,隨機游走的模擬就在這里完成喲。這里有四種可能的移動動作:向右移動可以用遞增x坐標(x++)模擬,向左移動可以遞減x坐標(x--),向前可以遞增y坐標(y++),向后可以遞減y坐標(y--)。那么,如何隨機選擇移動方向呢?先前我們用兩次投硬幣的方法確定移動方向,這里我們用random()函數(shù)產(chǎn)生一個隨機數(shù)。程序里為了顯示效果能明顯,選擇了每次移動兩步(如x+=2)。
既然完成了Walker類,下面就要完成程序主體框架了——setup()部分和draw()部分。話不多說,代碼如下:
仿真效果如何,請您欣賞。