Текущее время: 10 сен 2010, 05:46

Часовой пояс: UTC + 2 часа




Начать новую тему Ответить на тему  [ 1 сообщение ] 
Автор Сообщение
 Заголовок сообщения: Алгоритм поиска точки в многоугольнике
СообщениеДобавлено: 26 авг 2009, 18:03 
Аватара пользователя
Не в сети

Откуда: Млечный путь
На java:

Код:
package whitefang.algoritm.geometry;

public class PointInsidePolygon {
   
   public static int abs (int number) {
      if (number < 0) return number * (-1);
      return number;       
   }
   
   static int IsPointInsidePolygon (Point[] p, int Number, int x, int y)
   {
    int i1, i2, n, N, S, S1, S2, S3, flag = 0;
    N = Number;
    for (n=0; n<N; n++)
    {
     flag = 0;
     i1 = n < N-1 ? n + 1 : 0;
     while (flag == 0)
     {
      i2 = i1 + 1;
      if (i2 >= N)
        i2 = 0;
      if (i2 == (n < N-1 ? n + 1 : 0))
        break;
      S = abs (p[i1].x * (p[i2].y - p[n ].y) +
               p[i2].x * (p[n ].y - p[i1].y) +
               p[n].x  * (p[i1].y - p[i2].y));
      S1 = abs (p[i1].x * (p[i2].y - y) +
                p[i2].x * (y       - p[i1].y) +
                x       * (p[i1].y - p[i2].y));
      S2 = abs (p[n ].x * (p[i2].y - y) +
                p[i2].x * (y       - p[n ].y) +
                x       * (p[n ].y - p[i2].y));
      S3 = abs (p[i1].x * (p[n ].y - y) +
                p[n ].x * (y       - p[i1].y) +
                x       * (p[i1].y - p[n ].y));
      if (S == S1 + S2 + S3)
      {
       flag = 1;
       break;
      }
      i1 = i1 + 1;
      if (i1 >= N)
        i1 = 0;
     }
     if (flag == 0)
       break;
    }
    return flag;
   }

   public static void main(String[] args) {
      Point[] masiv = new Point[3];
      Point a = new Point();
      a.x = 0;
      a.y = 0;
      Point b = new Point();
      b.x = 1;
      b.y = 1;
      Point c = new Point();
      c.x = 1;
      c.y = 2;                  
      masiv[0] = a;
      masiv[1] = b;
      masiv[2] = c;
      System.out.println(IsPointInsidePolygon(masiv, 3, 1, 2));      
   }

}

class Point {
   int x;
    int y;
}


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ 1 сообщение ] 

Часовой пояс: UTC + 2 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron