2011-05-29 78 views
1

我想隨機生成點。至少在y軸上應該有一個限制。之後,我將這些點連接到應該以簡單動畫進行的線。你可以想象這是一個醉酒的人隨便走走,上坡和下坡。生成隨機點構建程序線

enter image description here

這聽起來很簡單。我搜索了網絡,發現這可以使用markov chain完成。我認爲這個想法非常有趣。

您可以自己創建場景的第一個狀態,並將該狀態作爲輸入傳遞給markov鏈算法。該算法隨機更改此狀態並創建一個散步。

但是我無法找到該算法的任何示例,也沒有任何源代碼。我剛剛發現了一個演示馬爾可夫鏈算法的小程序:http://www.probability.ca/jeff/java/unif.html

請推薦一些代碼。任何其他想法如何實現這一點也表示讚賞。

我畫所以我要線條以類似的方式進行一個例子

enter image description here

。有山谷,山坡......它們是隨機的,但隨機性仍然適用於線條的初始狀態。這就是爲什麼我發現makrov鏈如此有趣在這裏:http://www.suite101.com/content/implementing-markov-chains-a24146

+1

請詳細寫明您的要求:如果x軸的距離是隨機的嗎?如果是,多少隨機。如果小的斜坡更可能發生或應該每次發生x和其他xes一樣多? – svick 2011-05-29 17:31:03

+0

我想生成某種無限的線。想象一下,你沿x軸向右滾動,線條隨着向下和向上的山體相接近。以圖片爲例。如果我將此作爲馬爾可夫鏈的輸入來繼續該行,它將以類似於輸入的方式繪製該行。 – 2011-05-29 17:43:31

回答

4

這裏是在Lua一些代碼:

absstepmax = 25 
ymin = -100 
ymax = 100 
x = 0 
y = 5 
for i = 1, 20 do 
    y = y + (math.random(2*absstepmax) - absstepmax - 1) 
    y = math.max(ymin, math.min(ymax, y)) 
    x = x + 5 
    print (x,y) 
end 

absstepmax限制每個迭代唉步

yminymax極限y的程度的大小

該示例中沒有偏見,即y可以向上或向下對稱變化。如果你想讓你的「醉酒」趨向於「下坡」,你可以將通話後的偏移量從absstepmax - 1更改爲absstepmax - 5或任何你喜歡的偏見。

在這個例子中,x步是固定的。您也可以使用相同的機制來做到這一點。

下面是一些樣品運行:

> absstepmax = 25 
> ymin = -100 
> ymax = 100 
> x = 0 
> y = 5 
> for i = 1, 20 do 
>>  y = y + (math.random(2*absstepmax) - absstepmax - 1) 
>>  y = math.max(ymin, math.min(ymax, y)) 
>>  x = x + 5 
>>  print (x,y) 
>> end 
5 4 
10 22 
15 37 
20 39 
25 50 
30 40 
35 21 
40 22 
45 12 
50 16 
55 16 
60 12 
65 -1 
70 -8 
75 -14 
80 -17 
85 -19 
90 -25 
95 -37 
100 -59 
> absstepmax = 25 
> ymin = -100 
> ymax = 100 
> x = 0 
> y = 5 
> for i = 1, 20 do 
>>  y = y + (math.random(2*absstepmax) - absstepmax - 1) 
>>  y = math.max(ymin, math.min(ymax, y)) 
>>  x = x + 5 
>>  print (x,y) 
>> end 
5 -2 
10 -15 
15 -7 
20 1 
25 1 
30 12 
35 23 
40 45 
45 43 
50 65 
55 56 
60 54 
65 54 
70 62 
75 57 
80 62 
85 86 
90 68 
95 76 
100 68 
> 

彩繪結果從OP補充說:

enter image description here