2016-09-15 28 views
0

私はクラスを作成しており、2つの円がその距離に基づいて重なっているかどうかを判断する必要があります。これは私が持っているものです:2つの円が重なっているかどうかを確認する方法

私のプロセスでは、中心の距離が半径の合計よりも小さい場合、円が重なります。

+0

Math.sqrt()への呼び出しを削除していますが、[Eclipse2Dの](HTTPSを利用することができるかもしれません。 //docs.oracle.com/javase/7/docs/api/java/awt/geom/Ellipse2D.html)交差点のチェック機能。 –

答えて

3

の角を半径の合計のと比較しようとしています。距離を半径の合計と比較したいとします。

また、あなたはMath.sqrtを使用する必要性を除去するであろう平方半径の和の、までの距離の平方を比較することができます。また、あなたはすでにthisotherは両ディスクを参照するために持っているとき、変数abを持つにはポイントがありませんことを

注意。実際には、abを両方ともotherと誤って指定しました。これは次のように修正できます。

public boolean overlaps(Disk other) { 
    double xDistance = getX() - other.getX(); 
    double yDistance = getY() - other.getY(); 

    double sumOfRadii = getRadius() + other.getRadius(); 
    double distanceSquared = xDistance * xDistance + yDistance * yDistance; 

    boolean isOverlapping = distanceSquared < sumOfRadii * sumOfRadii; 
    return isOverlapping; 
} 
+1

'a'と' b'は 'Disk other'と同じであることを指摘したいかもしれません。 –

+0

ああ、良い点。私はそのエラーに気付かなかった。 –

2

変更2つの物事:

Circle a = this; // "this" instead of "other" 

、あなたが探しているではないものをおそらく

関連する問題