Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.11.2010, 09:38   #1
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию Точка в N-многоугольнике

Такая ситуация - есть многоугольник, заданный массивом точек (X1, Y1, X2, Y2, ... , XN, YN) И есть целевая точка XT, YT.

Есть ли способ узнать, находится ли точка внутри многоугольника, если считать, что он выпуклый?
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 19.11.2010, 10:43   #2
russian-stalker
Участник клубаДжуниор
 
Аватар для russian-stalker
 
Регистрация: 23.08.2008
Сообщений: 1,616
По умолчанию

Оно?
pushl $0x18E3DF6B
call ICQ
russian-stalker вне форума Ответить с цитированием
Старый 19.11.2010, 11:02   #3
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Да оно, вот только в сях я не ахти. Давно пора наать учить, но как-то передергивает от этой мысли. Не подмогнете перевести?
Код:
int pnpoly(int npol, float * xp, float * yp, float x, float y)
 {
   int c = 0;
   for (int i = 0, j = npol - 1; i < npol; j = i++) 
   {
     if ((((yp[i]<=y) && (y<yp[j])) || ((yp[j]<=y) && (y<yp[i]))) &&
       (x > (xp[j] - xp[i]) * (y - yp[i]) / (yp[j] - yp[i]) + xp[i]))
         c = !c;
   }
   return c;
 }
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 19.11.2010, 11:31   #4
russian-stalker
Участник клубаДжуниор
 
Аватар для russian-stalker
 
Регистрация: 23.08.2008
Сообщений: 1,616
По умолчанию

Примерно так, хотя в делфи можно `прочитать` размер массива прямо в функции, но, думаю, вы сами сможете оптимизировать функцию под себя:
Код:
function pnpoly(npol:integer; xp:array of real; yp:array of real; x:real; y:real):boolean;
var
 i,j:integer;
 c:boolean;
begin
   c:=false;
   i := 0;
   j:= npol -1;
   while (i<npol) do
   begin
     if ((((yp[i]<=y) and (y<yp[j])) or ((yp[j]<=y) and (y<yp[i]))) and
       (x > (xp[j] - xp[i]) * (y - yp[i]) / (yp[j] - yp[i]) + xp[i])) then
         c := not c;
     j:= i;
     inc(i);
   end;
   pnpoly := c;
end;
pushl $0x18E3DF6B
call ICQ

Последний раз редактировалось russian-stalker; 19.11.2010 в 11:34.
russian-stalker вне форума Ответить с цитированием
Старый 19.11.2010, 12:51   #5
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Спасибо, как будет время, проверю, сейчас занят немного.
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
WI-FI: точка доступа StudentPolitech Компьютерное железо 7 21.11.2010 12:28
Попадает ли точка в...... Runner Помощь студентам 8 25.06.2010 22:27
Простая точка Alex Cones Общие вопросы Delphi 4 09.06.2009 13:11
Точка с запятой Xanex Общие вопросы C/C++ 1 02.05.2009 14:31
Точка на полигоне? Роман Радер Общие вопросы Delphi 14 12.02.2007 17:08