四角形の当たり判定

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

四角形の当たり判定

#1

投稿記事 by A » 15年前

CまたはC++で四角形の当たり判定を実装することは可能ですか?
出来たとして、どのように宣言(?)すればいいですか?
自分ではどうやっていいか分かりません・・・

ookami

Re:四角形の当たり判定

#2

投稿記事 by ookami » 15年前

お困りなんでしょうが、イマイチどのように回答したものか分かりかねます。

以下のような事でしょうか?
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:四角形の当たり判定

#3

投稿記事 by たかぎ » 15年前

> CまたはC++で四角形の当たり判定を実装することは可能ですか?

可能です。
ただし、四角形が同一平面上にあるのかどうか、曲面上にあるのか、三次元のユークリッド空間内にあるのか、非ユークリッド空間にあるのかによって難度は大きく変わります。

ookamiさんの例は、同一平面上の矩形(長方形)についてしか適用できませんね。
一般に四角形といった場合は、矩形も平行四辺形も台形もありますが、それ以外のものも当然扱わなければなりません。

まずは、どうしたいかのかを明確にすべきです。

A

Re:四角形の当たり判定

#4

投稿記事 by A » 15年前

説明不足で申し訳ありません。
簡単なブロック崩しを作っています。
正確には四角形ではなく"2D"の長方形です。で、DXライブラリで実装しようとしています。
演算子や変数の型などは分かりますが、C言語はほぼ全くやっていません。C++が入門程度。

>>ookamiさん
そんな感じなんですけど、長方形と円の衝突なので、ちょっと違います。
応用できそうな気もしますが、当たり判定についてはからっきしなもので・・・
答えて下さったのにすいません。

組木紙織

Re:四角形の当たり判定

#5

投稿記事 by 組木紙織 » 15年前

それならここを見れば分かります。
http://dixq.net/rp/34.html

#この円と長方形の当たり判定は質問多いな。
#誰か当たり判定ライブラリつくってくれないかな。

ookami

Re:四角形の当たり判定

#6

投稿記事 by ookami » 15年前

なるほど。

私の示した例は、座標軸に平行な長方形同士の衝突判定です。

長方形と円の衝突判定をしたい、とのことですが、長方形同士の衝突判定よりも複雑になります。

あえてそっちで進めてもよいでしょうが、ブロック崩しなら、当たり判定の時だけボールを四角に見立てても、そんなに違和感はないと思いますよ。ボールが格別大きいなら別ですが...

アトラス

Re:四角形の当たり判定

#7

投稿記事 by アトラス » 15年前

最近ブロック崩しを作りましたが、私の場合

・ボールの中心のY座標がブロックの上端のY座標と下端のY座標の間にある
・ボールとブロックの左端との距離が半径以下(つまり接触している)
・1フレーム前のボールのX座標が、ブロックの左端のX座標より小さい(接触していない)

これらを満たしたら左からぶつかっていると判定、それに応じた反射角度調整

これを4方向分全部作って当たり判定を作りました。

大まかな条件はこんな感じです
もっといい判定式はありそうですけどね;

A

Re:四角形の当たり判定

#8

投稿記事 by A » 15年前

いろいろ答えて下さってありがとうございます。
おおまかなプログラムの組み方は分かりました。
最初は円と長方形の当たり判定でやってみますが、
無理だった場合は、弾は結構小さいので、
弾を四角形に見立ててやってみます。

閉鎖

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