2016-06-16 7 views
2

私は2つの円の衝突検出を書いています。しかし、私が本当にしたいことを主目的にのみ示して下の画像のように、その表面の半分に他のオブジェクトと衝突することです:半分cricle面が異なる方向から他の円と衝突することになる html5キャンバスで半円の衝突を検出するにはどうすればいいですか?

enter image description here

。これをシミュレートする関数をどのように書くべきですか?私は2つの円の検出のために、現時点で判明している何

は、このようなものです:

var dx = circle1.x - circle2.x; 
var dy = circle1.y - circle2.y; 
var distance = Math.sqrt(dx * dx + dy * dy); 

if (distance < circle1.radius + circle2.radius) { 
    // collision detected! 
} 

しかし、どのようにメイン円のおよそ半分だけが巻き込ま?衝突したサークルサーフェスのほんの一部はどうでしょうか?数学だけを言ってください。円/ 2度の円が衝突を検出しますか?

答えて

0

衝突を検出するためのコードが正しいとします(私はそれをテストしませんでした)、あなたがしなければならないのは、どれが衝突するかを知るためにどの円が右側にあるかを判断することだけです。

イメージの半円がcircle1であるとします。

if (distance < circle1.radius + circle2.radius) { 
    // collision detected! 
    if(circle1.x < circle2.x){ 
     // Circle collided on the right side of the other circle, 
     // which means it's a real collision.. 
    } 
} 
0

その半円は回転できますか?そうでない場合は、かなり簡単です。衝突は右側でのみ発生します。つまり、half_circle_center.x_positionhalf_circle_center.x_position + half_circle.radiusの間でのみチェックする必要があります。

+0

はい、あらゆる方向に移動します。フラットパーツの衝突は検出されません。 – newguy

+0

それは難しいです - 私が知ることができるのは、2つのエッジポイント(現在のケースでは 'centerX、centerY + -radius'ですが、垂直でないラインではトリッキーになります)を決め、回転角度で形状。ランダムなX、Y点が半円内にあるかどうかを判断できます。 –

+0

しかし、衝突は一般的に難しい作業です。単純な形状を超えて複雑さが増していくことを望むなら、関連するライブラリを探すことをお勧めします。たとえばPhaserJSは、優れた物理エンジンを備えています。 –

関連する問題