ページ 11

円の描画するとき、精度を小数点までに出来ないでしょうか?

Posted: 2011年5月07日(土) 21:04
by BILT
今、シューティングを作っているのですが、球はDrawCircle()を使って描画しています。
しかし、相手がいる方角に飛ばす場合、描画するときの座標を小数まで使わないと多少ずれてしまいます。そこで、質問なんですが、今私はDrawCircleを使って塗りつぶしなしの円を描いているのですが、同じような円を、小数まで座標が指定できて描ける方法はないでしょうか?
ペイントなどで円を描いてそれを表示ってのはなしでお願いします。

Re: 円の描画するとき、精度を小数点までに出来ないでしょうか?

Posted: 2011年5月07日(土) 21:11
by h2so5
BILT さんが書きました: しかし、相手がいる方角に飛ばす場合、描画するときの座標を小数まで使わないと多少ずれてしまいます。
疑問があるのですが、何の座標と「多少ずれる」のでしょうか?

Re: 円の描画するとき、精度を小数点までに出来ないでしょうか?

Posted: 2011年5月07日(土) 21:25
by BILT
すみません。初めてこの掲示板使ったもので・・。説明不足のところを指摘してくれると嬉しいです。

敵が自機に向けて球を発射してくるのですが、その場合、大抵は座標を小数で足していきますので、int型のDrawCircle()だと小数以下が切り捨てられて、正確に自機のほうへ球を飛ばしてくれないんです。

このように、座標に小数で足していっても、いざDrawCircle()で座標を指定すると整数未満は切り捨てられます。
DrawCircle(x, y, r, GetColor(255,255,255), FALSE); x+=1.4; y+=2.5;

なので、整数未満を切り捨てないで円を描画できる方法はないでしょうか?

Re: 円の描画するとき、精度を小数点までに出来ないでしょうか?

Posted: 2011年5月07日(土) 21:34
by h2so5
x,y を doubleで宣言して、
DrawCircleに渡すときにintへキャストしてはどうでしょうか?

Re: 円の描画するとき、精度を小数点までに出来ないでしょうか?

Posted: 2011年5月07日(土) 21:43
by たいちう
まず開発環境を書きましょう。

一般論としては、最終的な描画はPixel単位で行われるので座標指定が整数なのです。
「ディスプレイの右から4.5Pixelめ上から7.3Pixelめに赤い点を描画」などということはできません。

何がずれているのか判りませんが、どこかで四捨五入を間違えている可能性もあります。
例えば、暗黙的に四捨五入される場合と暗黙的に切り捨てられる場合が混ざれば1Pixelずれますし、
プログラムに問題があれば、この誤差の累積を許してしまうかもしれません。

また、ライブラリの仕様も影響しているかもしれません。
Win32ApiのRectangleという関数は、長方形の左上(x1, y1)と右下の座標(x2, y2)を指定するのですが、
実際に描画される長方形には、x=x1は含まれますがx=x2は含まれません。下辺も同様です。

このような仕様を知らないと微妙にずれて感じるでしょう。
これ以上のアドバイスは、開発環境やコードによりますね。

Re: 円の描画するとき、精度を小数点までに出来ないでしょうか?

Posted: 2011年5月08日(日) 17:04
by BILT
解決しました。回答ありがとうございます

Re: 円の描画するとき、精度を小数点までに出来ないでしょうか?

Posted: 2011年5月08日(日) 17:06
by みけCAT
解決したのでしたら、解決チェックをお願いします。