У меня есть XML - список xy-координат (вершин), которые определяют край многоугольника. Я прочитал этот файл и сохранил вершины в ArrayList. Теперь я хотел бы перебрать готовый список ArrayList и сравнить две вершины друг с другом, чтобы решить, является ли ребро, соединяющее обе вершины, северным, западным, южным или восточным краем простого многоугольника.
Это код, который я могу использовать, чтобы проверить, является ли край, составляющий две точки, северным, западным, восточным или южным краем.
enum EdgeType {TOP, BOTTOM, LEFT, RIGHT, EMPTY}
public EdgeType orthoEdgeTypeCCW(double x0, double y0, double x1, double y1)
{
if(x0 == x1) // vertical
{
return (y0 < y1) ? EdgeType.RIGHT :
(y0 > y1) ? EdgeType.LEFT :
EdgeType.EMPTY;
}
else if(y0 == y1) // horizontal
{
return (x0 < x1) ? EdgeType.BOTTOM :
(x0 > x1) ? EdgeType.TOP :
EdgeType.EMPTY;
}
else
{
throw new IllegalArgumentException("Edge not orthogonal");
}
}
У меня есть две проблемы, решения которых я не могу найти:
Первый Я хотел бы проверить, отсортированы ли вершины по часовой стрелке или против часовой стрелки. Соответственно, мне пришлось бы изменить код для типов ребер.
Второй Я не знаю, как я могу перебирать ArrayList вершин, чтобы сравнить две вершины в каждый шаг. Например, на первом шаге v1 с v2, на втором v2 с v3, на третьем v3 с v4 и так далее .. Могу ли я, возможно, адресовать вершины в ArrayList с их индексами?