我正在尝试在 J 中生成谢尔宾斯基三角形(混沌游戏版本)。在给定 3 个顶点的情况下,生成它的一般迭代算法是:
point = (0, 0)
loop:
v = randomly pick one of the 3 vertices
point = (point + v) / 2
draw point
我正在尝试在 J 中创建惯用版本。到目前为止,这就是我所拥有的:
load 'plot'
numpoints =: 200000
verticesx =: 0 0.5 1
verticesy =: 0 , (2 o. 0.5) , 0
rolls =: ?. numpoints$3
pointsx =: -:@+ /\. rolls { verticesx
pointsy =: -:@+ /\. rolls { verticesy
'point' plot pointsx ; pointsy
这行得通,但我不确定我是否理解-:@+ /\.
. 我认为它只是因为数学上的怪癖才起作用。我试图制作一个二元函数,它可以像inaverage
一样通过点列表作为累积运行,但我无法得到类似的东西。我该怎么做?+
+/ \ i. 10
更新:
需要明确的是,我正在尝试创建一个avg
可以以这种方式使用的二进制函数:
avg /\ randompoints
avg =: -:@+
由于某种原因,不适用于此。所以我认为我遇到的问题是正确定义具有avg
适当可变性的函数。