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
、適切な多様性を持つ関数を適切に定義することだと思います。