HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2010
0211
TKRH乱数6解決


TKRH

リンク

2010/2/11(Thu) 15:37:31|NO.30519

ランダムウォークのようなものを
つくろうとしているのですが...
下のようなプログラムを実行すると毎回同じような
模様ができてしまいます。
どうすれば違う模様ができますか。
いい方法があれば教えてください。

screen 0,1000,900 randomize XXX=350 YYY=300 colorcount=0 count=0 *main count++ if(count\10=0){ colorcount++ } rrr=rnd(4) if(rrr=0){ XXX-- } if(rrr=1){ XXX++ } if(rrr=2){ YYY-- } if(rrr=3){ YYY++ } color colorcount,0,0 pset XXX,YYY if(count=900000){ stop } goto *main



この記事に返信する


tsuka

リンク

2010/2/11(Thu) 16:31:21|NO.30520

ランダムウォークがどのようなものか知りませんが、おそらく、HSPで使っている乱数生成アルゴリズムのせいではないかと思います。
自分で偏りの無いアルゴリズムを考えるしかないのではないでしょうか。

ちなみに、XXX,YYYの進む方位を8とおりにしてみたところ、パッと見ではわからない程度になったかもしれません。

rrr=rnd(8) if(rrr=0){ XXX-- } if(rrr=1){ XXX++ } if(rrr=2){ YYY-- } if(rrr=3){ YYY++ } if(rrr=4){ XXX-- YYY-- } if(rrr=5){ XXX++ YYY-- } if(rrr=6){ XXX-- YYY++ } if(rrr=7){ XXX++ YYY++ }



木村

リンク

2010/2/11(Thu) 19:20:38|NO.30527

 ランダムが左上寄りになりがちという意味ですか?
 スクリーンの中心が(500,450)なのに対して、ランダムクオークの開始地点が(350,300)なら
ランダムクオーク全体のイメージが全体を通して左上寄りになるのは当然かと思います。
 開始地点をウィンドウの中心にしたり、スクリーンの縦横幅を(700,600)にすればランダム
クオークが中心にあるような感じになります。

 ……後、ループにはwaitを入れてあげるべきかと。ノーウェイトソースは低スペックな
ノートパソコンにはきつかったです。



木村

リンク

2010/2/11(Thu) 19:27:17|NO.30529

・追伸
 ある程度時間が経つと同じ軌道に収束してしまいましたね。ループのどこかに

if count\1000=0 : randomize
 と、加筆すれば収束までの時間が伸ばせそうです。

※(A\B)はAをBで割った際の余りを返す式です



エイジ

リンク

2010/2/11(Thu) 19:44:11|NO.30532

rnd(4)の周期は2^18(約26万)しかないのでどうしてもそうなります。
一番良いのはrndの代わりにrndf_getiを使うことでしょう。
そのほかにはrndの代わりにこれを使うとか。
#define _rnd(%1) (rnd(32768)/(32767/(%1)+1))



undefined

リンク

2010/2/12(Fri) 13:57:47|NO.30549

hspda.asにrndf_getiというメルセンヌツイスタのアルゴリズムで乱数を発生させる
命令があるのですが、乱数の生成をそれに置き換えたら少し変わりました。


#include "hspda.as" screen 0,1000,900 XXX=350 YYY=300 colorcount=0 count=0 *main wait 0 count++ if(count\10=0){ colorcount++ } rndf_geti rrr,4 //ここ if(rrr=0){ XXX-- } if(rrr=1){ XXX++ } if(rrr=2){ YYY-- } if(rrr=3){ YYY++ } color colorcount,0,0 pset XXX,YYY if(count=900000){ stop } goto *main



TKRH

リンク

2010/2/12(Fri) 23:04:43|NO.30563

ありがとうございました。
解決しました。



ONION software Copyright 1997-2023(c) All rights reserved.