Мне интересно, может ли кто-нибудь из вас взглянуть на мой код метода и помочь мне разобраться, что делает его неисправным? Это простая задача по определению того, что или два прямоугольника перекрывают/перехватывают/касаются друг друга. Я искал на форуме и изучал тест/теорему разделительной оси. Оно работает. частично. Но проблема возникает, когда у меня есть два прямоугольника, которые не имеют одинаковых размеров. Heres код:Устранение неполадок метода
public boolean contains(MyRectangle2D x, MyRectangle2D y){
if(Math.abs(xAxisDistance(x, y)) - Math.abs(centerToPerimeterXDistance(x)) - Math.abs(centerToPerimeterYDistance(y)) > 0)
return false;
if(Math.abs(yAxisDistance(x, y)) - Math.abs(centerToPerimeterXDistance(x)) - Math.abs(centerToPerimeterYDistance(y)) > 0)
return false;
else
return true;
}
public double xAxisDistance(MyRectangle2D x, MyRectangle2D y){
return x.getXCenter() - y.getXCenter();
}
public double yAxisDistance(MyRectangle2D x, MyRectangle2D y){
return x.getYCenter() - y.getYCenter();
}
public double centerToPerimeterXDistance(MyRectangle2D x){
return x.getWidth()/2;
}
public double centerToPerimeterYDistance(MyRectangle2D x){
return x.getHeight()/2;
}
Короче говоря: у меня есть два if-предложения. один проверяет ось x, а другой проверяет ось y. И если расстояния между кругами меньше нуля, они перекрываются. Он отлично работает, когда круги имеют одинаковые размеры, но если один круг имеет большую высоту для eksample. он «перекрывается», когда его далеко.
Любой вход, который может подтолкнуть меня в правильном направлении для устранения этого, будет израсходован!
Я не мог воспроизвести вашу проблему. Вероятно, ваша ошибка в другой части кода. (Может быть, неправильный геттер или сеттер в 'MyRectangle2D'?) – Kayz
Да, это может быть и так. плохо смотреть в это! – Surangie