tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板
VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板
[ツリー表示へ]  [ワード検索]  [Home]

タイトル Re: アナログ時計の秒針が真っ直ぐにならない
投稿日: 2008/09/30(Tue) 09:33
投稿者よねKEN
>     Picture1.Line (0, 0)-(Cos(a), Sin(a)), QBColor(15)

(1) 変数aの値はDouble型で計算時の誤差が含まれています。
(2) Cos関数はDouble型の値を返します。計算結果には誤差を含まれています。

>     Picture1.ScaleTop = -1
>     Picture1.ScaleLeft = -1
>     Picture1.ScaleWidth = 2
>     Picture1.ScaleHeight = 2

(3) Picture1.Lineに指定している(Cos(a), Sin(a))が表す座標は上記の独自座標系から
実際の長さPicture1.Width で表される長さ(たぶんtwips単位?)の値を元に
画面に描画するために画面の座標系であるpixelに変換されることになりますが、
ここでも浮動小数点数の演算が発生しますので誤差が含まれています。

> 一体、何が原因なのでしょうか? また、どういう条件のときに真っ直ぐになるのでしょうか?

Picture1.Lineの2番目の座標のXに指定されたCos(a)の計算結果(Double型)の値を
pixel座標系に直すと最終的に整数に変換されることになりますが、
ここで丸めが発生します。そのときに0に丸められればまっすぐに、
1に丸められれば斜めになります。

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。