ページ 1 / 1
四角形の当たり判定
Posted: 2010年5月05日(水) 16:09
by A
CまたはC++で四角形の当たり判定を実装することは可能ですか?
出来たとして、どのように宣言(?)すればいいですか?
自分ではどうやっていいか分かりません・・・
Re:四角形の当たり判定
Posted: 2010年5月05日(水) 16:26
by ookami
お困りなんでしょうが、イマイチどのように回答したものか分かりかねます。
以下のような事でしょうか?
bool isHit(float Ax,float Ay,float Awidth,float Aheight,
float Bx,float By,float Bwidth,float Bheight) {
return (Ax<Bx+Bwidth) &&
(Ay<By+Bheidht) &&
(Bx<Ax+Awidth) &&
(By<Ay+Aheight);
}
規約も参考にしてください。
http://dixq.net/board/board.html
Re:四角形の当たり判定
Posted: 2010年5月05日(水) 17:05
by たかぎ
> CまたはC++で四角形の当たり判定を実装することは可能ですか?
可能です。
ただし、四角形が同一平面上にあるのかどうか、曲面上にあるのか、三次元のユークリッド空間内にあるのか、非ユークリッド空間にあるのかによって難度は大きく変わります。
ookamiさんの例は、同一平面上の矩形(長方形)についてしか適用できませんね。
一般に四角形といった場合は、矩形も平行四辺形も台形もありますが、それ以外のものも当然扱わなければなりません。
まずは、どうしたいかのかを明確にすべきです。
Re:四角形の当たり判定
Posted: 2010年5月05日(水) 19:13
by A
説明不足で申し訳ありません。
簡単なブロック崩しを作っています。
正確には四角形ではなく"2D"の長方形です。で、DXライブラリで実装しようとしています。
演算子や変数の型などは分かりますが、C言語はほぼ全くやっていません。C++が入門程度。
>>ookamiさん
そんな感じなんですけど、長方形と円の衝突なので、ちょっと違います。
応用できそうな気もしますが、当たり判定についてはからっきしなもので・・・
答えて下さったのにすいません。
Re:四角形の当たり判定
Posted: 2010年5月05日(水) 19:22
by 組木紙織
それならここを見れば分かります。
http://dixq.net/rp/34.html
#この円と長方形の当たり判定は質問多いな。
#誰か当たり判定ライブラリつくってくれないかな。
Re:四角形の当たり判定
Posted: 2010年5月05日(水) 19:26
by ookami
なるほど。
私の示した例は、座標軸に平行な長方形同士の衝突判定です。
長方形と円の衝突判定をしたい、とのことですが、長方形同士の衝突判定よりも複雑になります。
あえてそっちで進めてもよいでしょうが、ブロック崩しなら、当たり判定の時だけボールを四角に見立てても、そんなに違和感はないと思いますよ。ボールが格別大きいなら別ですが...
Re:四角形の当たり判定
Posted: 2010年5月06日(木) 00:06
by アトラス
最近ブロック崩しを作りましたが、私の場合
・ボールの中心のY座標がブロックの上端のY座標と下端のY座標の間にある
・ボールとブロックの左端との距離が半径以下(つまり接触している)
・1フレーム前のボールのX座標が、ブロックの左端のX座標より小さい(接触していない)
これらを満たしたら左からぶつかっていると判定、それに応じた反射角度調整
これを4方向分全部作って当たり判定を作りました。
大まかな条件はこんな感じです
もっといい判定式はありそうですけどね;
Re:四角形の当たり判定
Posted: 2010年5月07日(金) 17:23
by A
いろいろ答えて下さってありがとうございます。
おおまかなプログラムの組み方は分かりました。
最初は円と長方形の当たり判定でやってみますが、
無理だった場合は、弾は結構小さいので、
弾を四角形に見立ててやってみます。