AB 4.24.00 と AB 5 (CP4) での描画の違い

返信する


答えを正確に入力してください。答えられるかどうかでスパムボットか否かを判定します。

BBCode: ON
[img]: ON
[url]: ON
スマイリー: OFF

トピックのレビュー
   

展開ビュー トピックのレビュー: AB 4.24.00 と AB 5 (CP4) での描画の違い

by M.S. » 2007年6月12日(火) 20:47

イグトランス (egtra) さんありがとうございます。
「Rnd() * wx、Rnd() * wy」にするとうまくいきました。

1.3 と 1.5 では計算が全然違うんですね。
参考になりました。


これとは関係ないのですが、
AB 5 (CP4) で

コード: 全て選択

Dim a[5] As String
などのコードが、
内部エラーになるのですが、
以前のようにこれを使うには、
これをどのように変えれば良いのですか?

by イグトランス » 2007年6月11日(月) 22:06

Rnd関数を使ってください。これは0以上1未満の実数を返すので,wxやwyをRndの戻り値に掛け算すれば希望の範囲の乱数が得られます。

現在ABは,擬似乱数生成に線形合同法と呼ばれる方法を用いています。この方法は式が単純で広く使われていますが,下のほうの桁がランダムにならないという欠点を抱えています。そのため,そもそもrandの戻り値に剰余算を行うのは良くないとされています。

AB4までも線形合同法だったことに変わりはないのですが,乱数を生成した後除算で下の桁を捨てた値を返していたため,randの戻り値に剰余算した結果を使用しても問題になりませんでした(ランダムな値になりました)。この処理は線形合同法の欠点の埋め合わせとしてそれなりに知られている(あるいは容易に発想できる)方法です。

しかし,ABのrandは裏方で,Rndが公開されている関数であるということから,Rndの改良の際にこの処理をほとんど削除してしまいました。そのため,randの戻り値は下位の桁がランダムでないという線形合同法の特徴が現れるものになったのです。

これがrand/Rndの改良前後の差分表示です。
http://cvs.sourceforge.jp/cgi-bin/viewc ... 1.5&r2=1.3

Re: AB 4.24.00 と AB 5 (CP4) での描画の違い

by 7 » 2007年6月11日(月) 20:57

> 上記のコードを AB 4.24.00 と AB 5 (CP4) でコンパイルして実行してみると、
> 円の描画され方が違うのですが、
> 何故なのでしょうか?
実行してないので分からないのですが、Randomize命令を実行してみてはどうでしょう。
ActiveBasic ライブラリ さんが書きました:乱数は 0 以上、1 未満の実数で表されます。
疑似乱数の系列を初期化するにはRandomize命令語を使用して下さい。

AB 4.24.00 と AB 5 (CP4) での描画の違い

by M.S. » 2007年6月11日(月) 20:39

上記のコードを AB 4.24.00 と AB 5 (CP4) でコンパイルして実行してみると、
円の描画され方が違うのですが、
何故なのでしょうか?

厳密に言えば、
AB 4.24.00: 画面全体にまばらに描画
AB 5 (CP4): 画面全体に斜めに描画
です。

AB 5 でも AB 4.24 のようにまばらに描画したいのですが、
可能なのでしょうか?

ページトップ