生成随机点以构建程序行

时间:2011-05-29 16:55:57

标签: algorithm random procedural-generation

我想随机生成积分。至少应该对y轴有限制。稍后我将点连接到一条线,该线应该以简单的动画进行。你可以想象这是一个醉酒的人随意散步,上山和下坡。

enter image description here

听起来很简单。我在网上搜索,发现可以使用markov chain来完成。我认为这个想法非常有趣。

您可以自己创建场景的第一个状态,并将此状态作为马尔可夫链算法的输入传递。该算法随机改变这种状态并创建一个步行。

但是我找不到该算法的任何示例,也没有源代码。我刚刚发现了一个演示马尔可夫链算法的小程序:http://www.probability.ca/jeff/java/unif.html

请提供一些代码。任何其他想法如何实现这一点也是值得赞赏的。

我画了一个例子

enter image description here

所以我希望这条线以类似的方式进行。有山谷,斜坡......它们是随机的,但随机性仍然适用于线的初始状态。这就是我在这里发现makrov链如此有趣的原因:http://www.suite101.com/content/implementing-markov-chains-a24146

1 个答案:

答案 0 :(得分: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限制每次迭代y步的大小

yminymax限制了y

的范围

示例中没有偏差,即y可以向上或向下对称地改变。如果您希望“醉酒”更倾向于“下坡”,您可以在从absstepmax - 1absstepmax - 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