2011-12-19 26 views
2

はここで円クラスですか?Javaのサークルサークル衝突検出

P.S.平方根を避ける方法を使用できますか?コメント欄で

public boolean hasCollision(Circle circle){ 
    double xDiff = x - circle.getX(); 
    double yDiff = y - circle.getY; 

    double distance = Math.sqrt((Math.pow(xDiff, 2) + Math.pow(yDiff, 2))); 

    return distance < (radius + circle.getRadius()); 
} 
+5

この質問は、ここで詳細な回答を得た:http://stackoverflow.com/questions/1736734/circle-circle-collision –

+0

circle1.collide(CIRCLE2)のような方法がCIRCLE2の半径、xとyにアクセスする必要がありますしかしそれらは私的です。 –

+1

@SteveC: 'circle1'と' circle2'が両方とも同じ種類のオブジェクトのインスタンスであるとすると、明らかに問題にはなりません。 –

答えて

6
double xDif = x1 - x2; 
double yDif = y1 - y2; 
double distanceSquared = xDif * xDif + yDif * yDif; 
boolean collision = distanceSquared < (radius1 + radius2) * (radius1 + radius2); 
+1

x、y、半径に近似誤差がある場合(浮動小数点数を扱う場合によくあることです)、浮動小数点の比較はεを使用して行うのが最善です... – TacticalCoder

1

はここで更新されたJavaソリューションです。

+0

中心間の距離の2乗をどちらかの半径と比較しています。 –

+0

@PeteKirkhamはい、申し訳ありません。私はそれをレビューする前にそこにJavaScriptのソリューションを投げて、私はJavaにそれを更新していたので間違っていたことに気づいた。 – Briguy37

3
dx = x2 - x1; 
dy = y2 - y1; 
radiusSum = radius1 + radius2; 
return dx * dx + dy * dy <= radiusSum * radiusSum; // true if collision 

@instanceofTomからのリンクが優れている...写真付き:

0

円は、中心間の距離が半径の合計と等しい場合は接触し、距離が小さい場合は衝突します。

絶対距離を使用しているので、中心間の距離の2乗を半径の合計の2乗と比較するとよいです。