2012-06-09 4 views
1

Я пытаюсь написать небольшую программу, чтобы проверить, содержит ли один прямоугольник второй прямоугольник и расстояние между их границами должно быть меньше определенного числа, такого как 100 или 50. Когда я использую Метод Rectangle.contains он не заботится о различии между границами обоих прямоугольников. Есть ли способ, которым это может быть достигнуто?Проверьте, содержит ли прямоугольник другой прямоугольник с определенным расстоянием между границами

+0

Являются ли прямоугольники ортогональными? – nhahtdh

+0

Да, их оси всегда выровнены. – user613114

ответ

0

В Rectangle2D, мы имеем

булево содержит (двойной х, дважды у)

--- Tests if a specified coordinate is inside the boundary of this Rectangle2D. 

булево содержит (двойные х, двойной у, двойной ш, двойной ч)

--- Tests if the interior of this Rectangle2D entirely contains the specified set of rectangular coordinates. 

Так что невозможно узнать о расстоянии до моих знаний ...

1

пример кода и т. Д.?

Несмотря на это, вы должны будете сделать следующее: , если только оно не ошибается.

псевдо-код:

rectA = outside, rectB = inside 
if rectB.left - rectA.left < x then distance is ok else do something 
if rectB.top - rectA.top < y then distance is ok else do something 

и т.д. и т.п.

1

Если прямоугольники ортогональны, и я предполагаю, что вы назвали contains(Rectangle rect). Тогда у вас есть только сделать дополнительные сравнения:

inside.x - outside.x >= LEFT_BORDER && 
outside.x + outside.width - inside.x - inside.width >= RIGHT_BORDER && 
inside.y - outside.y >= TOP_BORDER && 
outside.y + outside.height - inside.y - inside.height >= BOTTOM_BORDER 

LEFT_BORDER, RIGHT_BORDER, TOP_BORDER, BOTTOM_BORDER являются для вас, чтобы определить.

+0

Как вы вычисляете значения для leftBorder, rightBorder и т. Д. Я не вижу API для этого внутри класса rectnagle – user613114

+0

@ user613114: Вы определяете их с любым значением, которое вы хотите. – nhahtdh

2

Вы можете использовать метод contains(Rectancle r) дважды: сначала проверить, находится ли внутренний прямоугольник внутри внешнего прямоугольника, а затем временно увеличить внутренний прямоугольник на половину порога в каждом направлении и повторить ту же проверку. На этот раз он больше не должен находиться внутри внешнего прямоугольника. Итак, в основном что-то вроде этого:

//Rectangle outer; // Do some proper setup for these two 
//Rectangle inner; 
int limit = 50; 
boolean containsWithinLimits = outer.contains(inner); 
inner.setLocation(inner.getX()-limit/2, inner.getY()-limit/2); 
inner.setSize(inner.getWidth()+limit, inner.getHeight()+limit); 
boolean containsWithinLimits = containsWithinLimits && !outer.contains(inner); 
// Now reset the bounds: 
inner.setLocation(inner.getX()+limit/2, inner.getY()+limit/2); 
inner.setSize(inner.getWidth()-limit, inner.getHeight()-limit); 
+0

Xes решает эту проблему. Благодарю. Но моя главная проблема, над которой я работаю, не решена. И я создал отдельный поток для того же самого. [Http://stackoverflow.com/questions/10959703/swing-jxmapviewer-focus-on-a-object-and-set-corresponding-zoom-level]. Если у вас есть какой-либо опыт в этой проблеме, вы можете мне помочь. – user613114

+0

Почему wiki сообщества? – Tharwen

+0

@Tharwen По ошибке. : / – ZeroOne

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