我想随机生成积分。至少应该对y轴有限制。稍后我将点连接到一条线,该线应该以简单的动画进行。你可以想象这是一个醉酒的人随意散步,上山和下坡。
听起来很简单。我在网上搜索,发现可以使用markov chain来完成。我认为这个想法非常有趣。
您可以自己创建场景的第一个状态,并将此状态作为马尔可夫链算法的输入传递。该算法随机改变这种状态并创建一个步行。
但是我找不到该算法的任何示例,也没有源代码。我刚刚发现了一个演示马尔可夫链算法的小程序:http://www.probability.ca/jeff/java/unif.html
请提供一些代码。任何其他想法如何实现这一点也是值得赞赏的。
我画了一个例子
所以我希望这条线以类似的方式进行。有山谷,斜坡......它们是随机的,但随机性仍然适用于线的初始状态。这就是我在这里发现makrov链如此有趣的原因:http://www.suite101.com/content/implementing-markov-chains-a24146
答案 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步的大小
ymin
和ymax
限制了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中添加绘制结果: