2011-05-29 80 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