2011-12-19 2 views
2

Вот класс круг:Java Круг-Круг Столкновение обнаружения

public class Circle { 
    private double radius; 

    private double x; 
    private double y; 
} 

Как я могу сказать, если два объекта из этого класса (кружки) встречными?

P.S. Можете ли вы использовать метод, который позволяет избежать квадратного корня?

+5

Этот вопрос получил подробный ответ здесь: http://stackoverflow.com/questions/1736734/circle-circle-collision –

+0

метод как circle1.collide (circle2) необходим доступ к circle2 по радиусу, х и у но частные. –

+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, радиус имеют ошибки аппроксимации (что часто бывает при работе с числами с плавающей запятой), то сравнение с плавающей запятой лучше всего делать с помощью epsilon ... – TacticalCoder

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()); 
} 
+0

Вы сравниваете квадрат расстояния между центрами до любого радиуса. –

+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

Круги будут касаться, когда расстояние между их центрами равно сумме их радиусов или столкнется, когда расстояние меньше.

Поскольку мы используем абсолютное расстояние, удобно сравнивать квадрат расстояния между центрами с квадратом суммы радиусов.

Смежные вопросы