Java-решение для определения того, лежит ли точка внутри многоугольника (прямоугольник) - PullRequest
0 голосов
/ 26 января 2012

Я читал Решение 3 (2D) на веб-сайте и пытался перевести это в Java-код. Пожалуйста, прокомментируйте, если Java верна. Вместо координат x и y я использую координаты широты и долготы (примечание: loc.getLongitude (), loc.getLatitude () - набор проверяемых точек, если внутри прямоугольника и заданные координаты (double) не являются действительными еще.

        double lat0 = 0.2;
        double long0 = 0.3;
        double lat1 = 1.2;
        double long1 = 1.3;
        double lat2 = 1.2;
        double long2 = 1.3;
        double lat3 = 1.2;
        double long3 = 1.3;
        double rel1 = (loc.getLongitude()- long0)*(lat1 - lat0)- ((loc.getLatitude()-lat0)*(long1-long0));
        double rel2 = (loc.getLongitude()- long1)*(lat2 - lat1)- ((loc.getLatitude()-lat1)*(long2-long1));
        double rel3 = (loc.getLongitude()- long2)*(lat3 - lat2)- ((loc.getLatitude()-lat2)*(long3-long2));
        double rel4 = (loc.getLongitude()- long3)*(lat0 - lat3)- ((loc.getLatitude()-lat3)*(long0-long3));

        if (rel1 >= 0 && rel2 >= 0 && rel3 >= 0 && rel4 >= 0 )
        {
            try
            {
            ..........
                            ..........
            }
        else
        {
            .........

        }
        }

1 Ответ

1 голос
/ 26 января 2012
  1. Все rel1..rel4 должны иметь один и тот же знак, не обязательно положительный, может быть - все отрицательный.
  2. Это будет работать только для выпуклых многоугольников.
  3. Я не знаю, справедливо ли использовать 2d алгоритм на 3d модели (широты и долготы взяты из плоских координат, не так ли?). Да, в общем случае это даст правильный результат, но в некоторых случаях вам придется иметь дело с ситуацией, когда линия, соединяющая две точки «на глобусе», будет не такой, как в проекции.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...