2012-04-06 4 views
0

У меня есть 2 секции, каждая секция содержит 2 точки и каждая точка имеет X и Y. Каков наилучший способ найти перекрытие между этими двумя разделами? (только по X, имеющему значение здесь)Алогрит, чтобы найти перекрытие между двумя разделами

public class section 
{ 
    double leftPoint; 
    double rightPoint; 
} 
+0

что такое 'dpuble' ?? – 11684

+0

ошибка ........ –

+0

Я подозревал, что, но в ООП у вас всегда могут быть определенные классы/объекты! – 11684

ответ

0

Вот пример кода, который покажет вам, как это сделать. Я предполагаю, что два раздела (a_from, a_to) и (b_from, b_to) и задают результирующий раздел (res_from, res_to). Кроме того, я только пересекаю интервалы на оси х, так как это кажется тем, что вы хотите. Идея состоит в том, что результаты начинаются с более поздних двух истоков и заканчиваются на более раннем из двух концов.

Point a_from, a_to; 
Point b_from, b_to; 
Point res_from = new Point(); 
Point res_to = new Point(); 
res_from.SetX(Math.max(a_from.getX(), b_from.getX())); 
res_to.SetX(Math.min(a_to.getX(), b_to.getX())); 

Обратите внимание, что если res_to.x < res_from.x Там нет пересечения вообще.

Также здесь я предполагаю a_from.x < = a_to.x и b_from.x < = b_to.x, что может не всегда быть истинным. Если это не так, вам нужно вычислить res_from.x как Math.max(Math.min(a_from.getX(), a_to.getX()), Math.min(b_from.getX(), b_to.getX()))

+0

каждая секция имеет 2 балла, и каждое poing имеет getX(), getY() –

+0

Если вы определяете класс раздела, я дам ответ ближе к тому, что вам нужно. Также могу ли я предположить, что координаты x обоих разделов не уменьшаются? –

+0

см. Мое обновление, каждая точка имеет метод getX() и getY() –

3

Не имеет ли метода прямоугольника для этого? Если вы создаете два прямоугольника (размер и расположение так же, как эти «разделы»), вы можете сравнить их с помощью intersection(), что вернет прямоугольник перекрывающейся области.

+0

как: 'rectangle1.intersection (rectangle2);' – 11684

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