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

ActiveBasicでのプログラミングでわからないこと、困ったことなどがあったら、ここで質問してみましょう(質問を行う場合は、過去ログやWeb上であらかじめ問題を整理するようにしましょう☆)。
返信する
メッセージ
作成者
M.S.
記事: 212
登録日時: 2005年6月01日(水) 21:51
お住まい: 奈良県北西部

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

#1 投稿記事 by M.S. »

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

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

AB 5 でも AB 4.24 のようにまばらに描画したいのですが、
可能なのでしょうか?
7
記事: 473
登録日時: 2005年5月31日(火) 18:51
お住まい: 新潟県
連絡する:

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

#2 投稿記事 by 7 »

> 上記のコードを AB 4.24.00 と AB 5 (CP4) でコンパイルして実行してみると、
> 円の描画され方が違うのですが、
> 何故なのでしょうか?
実行してないので分からないのですが、Randomize命令を実行してみてはどうでしょう。
ActiveBasic ライブラリ さんが書きました:乱数は 0 以上、1 未満の実数で表されます。
疑似乱数の系列を初期化するにはRandomize命令語を使用して下さい。
イグトランス
記事: 899
登録日時: 2005年5月31日(火) 17:59
お住まい: 東京都
連絡する:

#3 投稿記事 by イグトランス »

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
M.S.
記事: 212
登録日時: 2005年6月01日(水) 21:51
お住まい: 奈良県北西部

#4 投稿記事 by M.S. »

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

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


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

コード: 全て選択

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