Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Входит ли точка в фигуру? 
:(
    Опции темы
Ravend
Дата 28.6.2006, 14:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 91
Регистрация: 19.7.2005

Репутация: нет
Всего: 1



Привет, All!

требуется определить входит ли точка в фигуру
фигура наиболее похожа на вертикально стоящее куринное яйцо (эллипс со смещенным к низу центром)

подскажите как это можно решить?
спасибо 
PM MAIL   Вверх
skyboy
Дата 28.6.2006, 14:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: нет
Всего: 260



Ravend, уравнение поверхности есть? Тогда сделать так, чтоб уравнение описывало поверхность с осью эквивалетной оси Z. Берем z-координату точки, которую проверяем. От поверхности отсекаем эллипс на этом уровне и опеределяем, принадлежит ли точка эллипсу. 
PM MAIL   Вверх
Ravend
Дата 28.6.2006, 15:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 91
Регистрация: 19.7.2005

Репутация: нет
Всего: 1



фигура 2х мерная
Цитата
От поверхности отсекаем эллипс на этом уровне и опеределяем, принадлежит ли точка эллипсу.

вот собственно это и хотелось узнать, в виде формул 
PM MAIL   Вверх
maxim1000
Дата 28.6.2006, 15:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 33
Всего: 110



как задана граница?
(формула, просто на рисунке точками или ещё как-то) 


--------------------
qqq
PM WWW   Вверх
Ravend
Дата 28.6.2006, 16:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 91
Регистрация: 19.7.2005

Репутация: нет
Всего: 1



собственно первоначальная задача такова, нужно найти точки входящие в окружность с R радиусом (см. рисунок), но при переводе данной окружности к декартовой системе координат, окружность приобретает сходство с 2d-проекцией яйца, возможно я пошел и не тем путем, но мне кажется что нужно искать именно вхождение точек в описанной мной эллипс

P.S.
очень важно найти входящие точки одной итерацией (вывести формулу) т.к. в дальнейшем эта формула должна подставляться в sql-запрос 

Присоединённый файл ( Кол-во скачиваний: 46 )
Присоединённый файл  t1.PNG 24,44 Kb
PM MAIL   Вверх
skyboy
Дата 28.6.2006, 17:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: нет
Всего: 260



Ravend, не ясно, почему окружность в декартовой системе координат перестаёт быть окружностью... 
PM MAIL   Вверх
maxim1000
Дата 28.6.2006, 17:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 33
Всего: 110



Цитата(Ravend @  28.6.2006,  15:29 Найти цитируемый пост)
но мне кажется что нужно искать именно вхождение точек в описанной мной эллипс

формула внутренности эллипса простая:
sqr(x/a)+sqr(x/b)<=1 (для случая, когда оси эллипса параллельны осям координат)
a - длина горизонтальной полуоси
b - вертикальной
Цитата(Ravend @  28.6.2006,  15:29 Найти цитируемый пост)
  t1.PNG 24,44 Kb

вот чего-чего, а эллипса там не увидел...

вариант (по рисунку) такой:
выводим зависимость координат (x,y) от номера
делаем 6 линейных неравенств... 


--------------------
qqq
PM WWW   Вверх
chich
Дата 29.6.2006, 07:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 20.6.2006

Репутация: нет
Всего: нет



по-моему для того чтобы получить ответ на свой вопрос надо его ставить конкретно - что дано, что надо получить.

но если я правильно понял до задана окружность с координатами в точке x y и с радиусом R. так зачем же городить огород надо просто проверять если расстояние до центра меньше радиуса, значит точка принадлежит окружности 
PM MAIL   Вверх
Ravend
Дата 29.6.2006, 10:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 91
Регистрация: 19.7.2005

Репутация: нет
Всего: 1



Цитата(chich @ 29.6.2006,  07:58)
по-моему для того чтобы получить ответ на свой вопрос надо его ставить конкретно - что дано, что надо получить.

но если я правильно понял до задана окружность с координатами в точке x y и с радиусом R. так зачем же городить огород надо просто проверять если расстояние до центра меньше радиуса, значит точка принадлежит окружности

Вы уважаемый картинку смотрели?
приведите изображенную фигуру к декартовой системе координат и посмотрите какая у Вас окружность получится, если Вы мне напишете формулу буду весьма признателен

а флудить просьба в другом месте 
PM MAIL   Вверх
chich
Дата 29.6.2006, 11:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 20.6.2006

Репутация: нет
Всего: нет



есть такие же формулы эллипса (см выше), 
хотя она тоже не нужна если принять за единичный отрезок по оси x 1
а по оси y 2. Тогда ваше так сказать "яйцо" превратится в окружность - все дело в единицах измерения. 

и по-моему есть еще куча решений вашей задачи,но это самое простое (по-моему даже очень).

Можно разделить контур окружности на две части верхнюю и нижнюю и смотреть по графикам - если ниже одного и выше другого то попадает в окружность.

и еще есть куча вариантов 
PM MAIL   Вверх
Romikgy
Дата 29.6.2006, 11:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 1
Всего: 146



Цитата(Ravend @  29.6.2006,  09:17 Найти цитируемый пост)
Вы уважаемый картинку смотрели?

А вы ? smile
Цитата(maxim1000 @  28.6.2006,  16:33 Найти цитируемый пост)
вот чего-чего, а эллипса там не увидел...
 smile 
 


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Ravend
Дата 29.6.2006, 12:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 91
Регистрация: 19.7.2005

Репутация: нет
Всего: 1



сдается мне, что вы просто не делали преобразования, вот что у меня получается, и убедите меня что это окружность 

Присоединённый файл ( Кол-во скачиваний: 32 )
Присоединённый файл  t2.PNG 5,23 Kb
PM MAIL   Вверх
Romikgy
Дата 29.6.2006, 12:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 1
Всего: 146



Из первого рисунка у тебя шестиугольник!
Из второго , при такой дискретности, вообще не понятно что.
так что сначало имхо надо немного конкретизировать задачу, а уж потом спрашивать, smile
ты спросил про окружность тебе про нее и ответили, на картинках совсем другое smile 


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Ravend
Дата 29.6.2006, 12:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 91
Регистрация: 19.7.2005

Репутация: нет
Всего: 1



см. пост №1
Цитата

требуется определить входит ли точка в фигуру
фигура наиболее похожа на вертикально стоящее куринное яйцо (эллипс со смещенным к низу центром)

упоминание мной окружности относиться к не декартовой системе координат, заметте что там единицей является не квадрат, а гексагон следовательно формула окружности известная нам не подходит

поймите, что точка A1(0;1) в этой системе стоит не просто справо от точки A0(0;0), а с право-вверх 
PM MAIL   Вверх
skyboy
Дата 29.6.2006, 12:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: нет
Всего: 260



Ravend, у тебя координаты могут принимать только целые значения? если да и будешь работать с базой, то занеси в таблицу все целочисленные координаты относящиеся к фигуре и проверяй на принадлежность просто выборкой-select.  
PM MAIL   Вверх
Ravend
Дата 29.6.2006, 14:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 91
Регистрация: 19.7.2005

Репутация: нет
Всего: 1



да целочисленные, но к сожалению Вам способ не подходит, т.к. он предусматривает заранее заданный размер фигуры, и соответственно динамически менять диаметр не получиться smile

но спасибо за совет smile 
PM MAIL   Вверх
skyboy
Дата 29.6.2006, 15:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: нет
Всего: 260



Ravend, сорри за глупый вопрос, но где на этой фигуре диаметр?

Добавлено @ 15:11 
вообще, не могли бы на пальцах пояснить, как эту фигуру "приводить в декартовы координаты"? 
PM MAIL   Вверх
Ravend
Дата 29.6.2006, 16:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 91
Регистрация: 19.7.2005

Репутация: нет
Всего: 1



ссори если было не понятно, думаю такой рисунок снимет вопрос

P.S.
фигура представляет собой окружность (возможно изобразил не совсем достоверно) с радиусом R (в данном случае =5), но данные в БД хранятся в виде X:Y, требуется вывести формулу подставив которую в запрос можно было выбирать точки входящие в данную фигуру
 

Присоединённый файл ( Кол-во скачиваний: 20 )
Присоединённый файл  t3.PNG 26,60 Kb
PM MAIL   Вверх
Aloha
Дата 29.6.2006, 18:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


.
**


Профиль
Группа: Участник Клуба
Сообщений: 351
Регистрация: 14.5.2006

Репутация: 4
Всего: 165



Ravend

Идея такая. Помещаем центр нашего шестиугольного "круга" в начало координат. Перенумеровываем шестиугольники как показано на рис. слева (это можно сделать любым другим способом, главное, чтобы каждый шестиугольник имел уникальный номер). Затем перенумеровываем шестиугольники как показано на рис. справа. Таблицу соответствия храним в БД.

Далее, задаемся вопросом, принадлежит ли "кругу", например, шестиугольник №101 и если да, то какой именно "окружности" (слою). По таблице соответствия находим номер нашего шестиугольника на рис. справа – это №75.
Далее пользуемся формулой (привожу ее Excel’евский вариант):

=ОКРВНИЗ((-1+КОРЕНЬ(1+8*ОКРВНИЗ((A1-1)/6;1)))/2;1)+1

Подставляем в нее 75 (данные для вычисления помещаем в ячейку A1)
Получаем в результате число 5 – это искомый номер "окружности" (нумерация начинается с 0).

Точно также, например, для шестиугольника №161 получаем по таблице соответствия номер 192, подставляем его в формулу и получаем номер окружности – 8.

P.S.  Должен отметить, что приведенная формула некорректно обрабатывает №0.

Если нужны подробности по формуле – пишите в личку.
     

Это сообщение отредактировал(а) Aloha - 29.6.2006, 18:24

Присоединённый файл ( Кол-во скачиваний: 16 )
Присоединённый файл  01.gif 105,60 Kb
PM   Вверх
Ravend
Дата 30.6.2006, 09:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 91
Регистрация: 19.7.2005

Репутация: нет
Всего: 1



Aloha, спасибо но тоже то smile

выше приводилась формула:
Цитата

формула внутренности эллипса простая:
sqr(x/a)+sqr(x/b)<=1 (для случая, когда оси эллипса параллельны осям координат)
a - длина горизонтальной полуоси
b - вертикальной

только в ней участвуют центр эллипса и его радиусы, а как здесь учесть точки проверяемые на принадлежность фигуре 
PM MAIL   Вверх
maxim1000
Дата 30.6.2006, 11:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 33
Всего: 110



предполагается, что центр в нуле
если нет - поотнимать его координаты от координат проверяемой точки
т.е. получается:
sqr( (x-xc)/a ) + sqr( (y-yc)/b ) <= 1 


--------------------
qqq
PM WWW   Вверх
Ravend
Дата 30.6.2006, 11:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 91
Регистрация: 19.7.2005

Репутация: нет
Всего: 1



всем спасибо, вроде решение найдено 
PM MAIL   Вверх
SoWa
Дата 1.7.2006, 14:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Харекришна
****


Профиль
Группа: Комодератор
Сообщений: 2422
Регистрация: 18.10.2004

Репутация: 6
Всего: 74



Код

function PtInRgn(TestPolygon : array of TPoint; const P : TPoint): boolean;
 var
   ToTheLeftofPoint, ToTheRightofPoint : byte;
   np : integer;
   OpenPolygon : boolean;
   XIntersection : real;
 begin
   ToTheLeftofPoint := 0;
   ToTheRightofPoint := 0;
   OpenPolygon := False;

   {Prufen ob das Polygon geschlossen ist}
   {tests if the polygon is closed}

   if not ((TestPolygon[0].X = TestPolygon[High(TestPolygon)].X) and
     (TestPolygon[0].Y = TestPolygon[High(TestPolygon)].Y)) then
     OpenPolygon := True;

   {Tests fur jedes Paar der Punkte, um zu sehen wenn die Seite zwischen 
   ihnen, die horizontale Linie schneidet, die TestPoint durchlauft}
   {tests for each couple of points to see if the side between them 
   crosses the horizontal line going through TestPoint}

   for np := 1 to High(TestPolygon) do
     if ((TestPolygon[np - 1].Y <= P.Y) and
       (TestPolygon[np].Y > P.Y)) or
       ((TestPolygon[np - 1].Y > P.Y) and
       (TestPolygon[np].Y <= P.Y))
       {Wenn es so ist}    {if it does}
       then
     begin
       {berechnet die x Koordinate des Schnitts}
       {computes the x coordinate of the intersection}

       XIntersection := TestPolygon[np - 1].X +
         ((TestPolygon[np].X - TestPolygon[np - 1].X) /
         (TestPolygon[np].Y - TestPolygon[np - 1].Y)) * (P.Y - TestPolygon[np - 1].Y);

       {Zahler entsprechend verringern}
       {increments appropriate counter}
       if XIntersection < P.X then Inc(ToTheLeftofPoint);
       if XIntersection > P.X then Inc(ToTheRightofPoint);
     end;

   {Falls das Polygon offen ist, die letzte Seite testen}
   {if the polygon is open, test for the last side}

   if OpenPolygon then
   begin
     np := High(TestPolygon);  {Thanks to William Boyd - 03/06/2001}
     if ((TestPolygon[np].Y <= P.Y) and
       (TestPolygon[0].Y > P.Y)) or
       ((TestPolygon[np].Y > P.Y) and
       (TestPolygon[0].Y <= P.Y)) then
     begin
       XIntersection := TestPolygon[np].X +
         ((TestPolygon[0].X - TestPolygon[np].X) /
         (TestPolygon[0].Y - TestPolygon[np].Y)) * (P.Y - TestPolygon[np].Y);

       if XIntersection < P.X then Inc(ToTheLeftofPoint);
       if XIntersection > P.X then Inc(ToTheRightofPoint);
     end;
   end;

   if (ToTheLeftofPoint mod 2 = 1) and (ToTheRightofPoint mod 2 = 1) then Result := True
   else
     Result := False;
 end; {PtInRgn}

 


--------------------
Всем добра smile
PM MAIL ICQ   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.1320 ]   [ Использовано запросов: 20 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.