这是圆圈类:
public class Circle {
private double radius;
private double x;
private double y;
}
如何判断此类(圆圈)中的两个对象是否发生碰撞?
P.S。你能使用避免取平方根的方法吗?
答案 0 :(得分:7)
double xDif = x1 - x2;
double yDif = y1 - y2;
double distanceSquared = xDif * xDif + yDif * yDif;
boolean collision = distanceSquared < (radius1 + radius2) * (radius1 + radius2);
答案 1 :(得分:4)
dx = x2 - x1;
dy = y2 - y1;
radiusSum = radius1 + radius2;
return dx * dx + dy * dy <= radiusSum * radiusSum; // true if collision
评论中来自@instanceofTom的链接更好......带图片。
答案 2 :(得分:1)
这是更新的Java解决方案:
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());
}
答案 3 :(得分:1)
当圆心之间的距离等于半径之和时,圆会触碰,或者当距离较小时,圆会碰撞。
由于我们使用绝对距离,所以可以比较中心之间距离的平方与半径之和的平方。