1

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

これは機能しますが、で何が起こっているのかわかりません-:@+ /\.。私はそれが数学的な癖のためにのみ機能していると思います。averageの場合と同じように、ポイントのリストを累積として実行するダイアディック関数を作成しようとしましたが、そのようなものを機能させることができ+ませ+/ \ i. 10んでした。どうすればいいですか?

アップデート:

avg明確にするために、私は次のように使用できるバイナリ関数を作成しようとしています。

avg /\ randompoints

avg =: -:@+何らかの理由で、これでは機能しません。ですから、私が問題を抱えているのはavg、適切な多様性を持つ関数を適切に定義することだと思います。

4

1 に答える 1

1

アルゴリズムにできるだけ近づけるために、私はおそらく次のようなことをします。

v =: 3 2$ 0 0 0.5, (2 o. 0.5), 1 0
ps =: 1 2 $ (?3) { v
next =: 4 :'y,((?x){v) -:@+ ({: y)'

ps =: (3&next)^:20000 ps
'point' plot ({.;{:) |: ps

しかし、あなたのバージョンははるかに効率的です。

于 2012-11-13T12:02:09.680 に答える