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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
BILT

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

#1

投稿記事 by BILT » 14年前

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

アバター
h2so5
副管理人
記事: 2212
登録日時: 14年前
住所: 東京
連絡を取る:

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

#2

投稿記事 by h2so5 » 14年前

BILT さんが書きました: しかし、相手がいる方角に飛ばす場合、描画するときの座標を小数まで使わないと多少ずれてしまいます。
疑問があるのですが、何の座標と「多少ずれる」のでしょうか?

BILT

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

#3

投稿記事 by BILT » 14年前

すみません。初めてこの掲示板使ったもので・・。説明不足のところを指摘してくれると嬉しいです。

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

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

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

アバター
h2so5
副管理人
記事: 2212
登録日時: 14年前
住所: 東京
連絡を取る:

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

#4

投稿記事 by h2so5 » 14年前

x,y を doubleで宣言して、
DrawCircleに渡すときにintへキャストしてはどうでしょうか?

たいちう
記事: 418
登録日時: 14年前

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

#5

投稿記事 by たいちう » 14年前

まず開発環境を書きましょう。

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

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

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

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

BILT

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

#6

投稿記事 by BILT » 14年前

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

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

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

#7

投稿記事 by みけCAT » 14年前

解決したのでしたら、解決チェックをお願いします。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

閉鎖

“C言語何でも質問掲示板” へ戻る