トップページ > 過去ログ > 記事閲覧
DrawCircle関数のfloat版
名前:K_T 日時: 2009/08/23 15:08

いつも拝見させて頂いております。 現在DxLibを使用してSTGを作成しています。 そこで、質問と言うか要望と言うか・・・なんですが。 ・DrawCircle関数の引数と実行結果をfloatに対応させて頂きたい。 これは無理でしょうか? と言うのも、自機や敵の当たり判定(円形で判定)範囲を表示するのにDrawCircle関数を使用したのですが、 引数がint型の為に、画像と微妙なズレが出てしまいます。 また、半径も仮に1.5f*2で3などとしたい場合も現状は出来ません。 それ用の画像を準備したりもしましたが、やはり手間が掛かるので簡単には利用できません。 もし・・・もしですけども、float型に対応したDrawCircle関数が利用できないでしょうか?

Page: 1 |

Re: DrawCircle関数のfloat版 ( No.1 )
名前:sy(サイ) 日時:2009/08/24 09:52

floatで計算して、直前でキャストすればよいのでは?
Re: DrawCircle関数のfloat版 ( No.2 )
名前:管理人 日時:2009/08/26 00:03

DrawCircle関数を float 型にするのは円の描画に使用しているアルゴリズムの関係上ちょっと難しいです・・・ float 型に対応した円の描画となりますと・・・ DrawLine関数を何回も呼んで円にする位しか思いつきません・・ #define TWO_PI (3.1415926535897932384626433832795f * 2.0f) void DrawCircleFloat( float x, float y, float r, int Color, int DivNum ) { int i ; float BackY, BackX, Y, X ; Y = sin( 0.0f ) * r + y ; X = cos( 0.0f ) * r + x ; for( i = 0 ; i < DivNum ; i ++ ) { BackY = Y ; BackX = X ; Y = sin( TWO_PI / DivNum * ( i + 1 ) ) * r + y ; X = cos( TWO_PI / DivNum * ( i + 1 ) ) * r + x ; DrawLine( ( int )BackX, ( int )BackY, ( int )X, ( int )Y, Color ) ; } } 円というより正多角形を描くだけの関数ですが、引数の DivNum の値を大きくすれば 段々円に近づいていきます・・・ただし描画負荷も高くなります・・・ すいません、これが今思いつく float 型に対応した円描画の限界です・・・
Re: DrawCircle関数のfloat版 ( No.3 )
名前:K_T 日時:2009/08/29 13:18

1週間ぶりにネットに接続したので、返事が遅くなり申し訳ありません。 sy(サイ)様、管理人様、回答ありがとうございます。 やはり無理でしたか・・・もしできるならと思っただけですので、 今回の対応、回答で十分です。 どの程度の処理負荷になるか試していませんが、STGで弾や自機などの 当たり判定範囲を表示するには、やはり無理がありそうですね・・・。 とりあえず画像を使用する事で対応します。 ありがとうございました。
Re: DrawCircle関数のfloat版 ( No.4 )
名前:d 日時:2009/08/29 14:59

画像で代用できるものなら、 始めに一度管理人様の方法で描画して それを保存しておけばいいのでは?
Re: DrawCircle関数のfloat版 ( No.5 )
名前:K_T 日時:2009/08/30 10:21

d様ありがとうございます。 そうですね。一度管理人様のコードで描画した物をキャプチャなりで保存しておけば、 手書きするより正確な円を使い回しできますね。 試してみます。

Page: 1 |