1

我想随机生成点。好吧,至少在 y 轴上应该有一个限制。后来我将这些点连接到一条线,这条线应该在一个简单的动画中进行。你可以把它想象成一个醉酒的人随意走动,上坡下坡。

在此处输入图像描述

这听起来很简单。我在网上搜索,发现这可以使用马尔科夫链来完成。我觉得这个想法真的很有趣。

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

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

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

我画了一个例子

在此处输入图像描述

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

4

1 回答 1

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 可以上下对称变化。如果您希望您的“醉酒”更倾向于“下坡”,您可以在调用 random from absstepmax - 1toabsstepmax - 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 添加的绘制结果:

在此处输入图像描述

于 2011-05-29T17:28:34.110 回答