Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Три точки на одной прямой. Помогите с решением! 
V
    Опции темы
Elfet
  Дата 28.11.2006, 20:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и Пушистый
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 3776
Регистрация: 2.4.2003

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



У меня есть координаты двух точек. Между ними есть ребро. Как определить курсор  (третья точка) лежит ли на этом ребре? Да и ещё что бы не точно на самом ребре (попасть курсором в тоненькую линию сложно) а в некоторой области ребра (недалеко от него)?  smile 
PS Координаты всех трех точек только целые значения.


--------------------
PM MAIL WWW Skype   Вверх
Sartorius
Дата 28.11.2006, 21:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1568
Регистрация: 18.7.2006
Где: Ivory tower

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



 A-------B------C

B лежит в области прямой AC, если|(AB {скалярно на} BC) рядом с 1.0.... smile 


PM MAIL ICQ   Вверх
Elfet
Дата 28.11.2006, 21:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и Пушистый
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 3776
Регистрация: 2.4.2003

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



Точно!  smile  Тока -1?

Добавлено @ 21:46 
Ой! smile) Хм, А что если A-------------C-------B Вот так? Мне ещё нужно что бы между двумя этими точками.


--------------------
PM MAIL WWW Skype   Вверх
Sartorius
Дата 28.11.2006, 22:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1568
Регистрация: 18.7.2006
Где: Ivory tower

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



 Не понимаю почему -1... cos(0) = 1?(тока скалярное произведение надо поделить на произвадение длин)... а второе условие(попадание между A и C ) проверь так : |AB| < |AC|... (A-----C-----B) другой случай (B----A---C) не подойдет по cos, который будет в районе -1

PM MAIL ICQ   Вверх
Elfet
Дата 28.11.2006, 22:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и Пушистый
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 3776
Регистрация: 2.4.2003

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



Хм, а если В---------------А?     С---------В-----------А - условие |AB| < |AC| выполняется. первое тоже. Так не пойдёт smile


--------------------
PM MAIL WWW Skype   Вверх
Sartorius
Дата 28.11.2006, 22:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1568
Регистрация: 18.7.2006
Где: Ivory tower

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



я же выше написал 
Цитата

 другой случай (B----A---C) не подойдет по cos, который будет в районе -1
Цитата

С---------В-----------А - условие |AB| < |AC| выполняется. первое тоже.


Ну и хорошо , тебе же это расположение тоже подходит (C и A меняются местами а B по прежнему менжду ними на ребре)

Это сообщение отредактировал(а) Sartorius - 28.11.2006, 22:55
PM MAIL ICQ   Вверх
cardinal
Дата 28.11.2006, 23:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

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



Можно подойти к этой проблеме в 3d пространстве, а потом выкинуть лишнее вычисление.

Условия для это задачи будут вроже такими:
1.  | AC x AB | <= Epsilon (этот как раз тот запас по расстоянии от отрезка)
2. AC * AB >= 0

Не проверял, но вроде так. Можно попробовать посчитать для нескольких случаев слепив векторы из координат точек и добавив z=0. По формулам можно будет понять, что останется от AC x AB...


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
Elfet
Дата 28.11.2006, 23:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и Пушистый
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 3776
Регистрация: 2.4.2003

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



Цитата(Sartorius @  28.11.2006,  23:52 Найти цитируемый пост)
C и A меняются местами а B по прежнему менжду ними на ребре

Мне нужно определить где С находится. На этом отрезке или нет?


--------------------
PM MAIL WWW Skype   Вверх
cardinal
Дата 29.11.2006, 01:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

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



Посмотри на этот рисунок (если я где-нибудь не прав - поправьте)...

Присоединённый файл ( Кол-во скачиваний: 18 )
Присоединённый файл  otrezok.jpg 169,57 Kb


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
Elfet
Дата 29.11.2006, 09:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и Пушистый
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 3776
Регистрация: 2.4.2003

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



cardinal, | AC x AB | - что это за произведение? И Что такое АС, АВ? Вектора? еz?

Это сообщение отредактировал(а) Elfet - 29.11.2006, 09:17


--------------------
PM MAIL WWW Skype   Вверх
cardinal
Дата 29.11.2006, 14:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

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



Цитата(Elfet @  29.11.2006,  07:16 Найти цитируемый пост)
| AC x AB | - что это за произведение?

http://en.wikipedia.org/wiki/Cross_product
Цитата(Elfet @  29.11.2006,  07:16 Найти цитируемый пост)
И Что такое АС, АВ? Вектора?

Да.
Цитата(Elfet @  29.11.2006,  07:16 Найти цитируемый пост)
еz?

Это вектор (0,0,1).


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
Elfet
Дата 30.11.2006, 14:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и Пушистый
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 3776
Регистрация: 2.4.2003

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



Попробовал я с произведением - не совсем то что хотелось бы. Так как разная точность получается с разных концов ребра.


А как можно определить длину от точки до прямой?


--------------------
PM MAIL WWW Skype   Вверх
kashka
Дата 30.11.2006, 14:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 117
Регистрация: 29.11.2004
Где: Wolfenbuettel, Ge rmany

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



если точка лежит на прямой, ее можно представить как:

t*p1 + (1- t)p2 = p3, 0<=t<=1

находишь t, если 0<=t<=1, значит p3 лежит на отрезке прямой p1, p2

PM MAIL   Вверх
sergejzr
Дата 30.11.2006, 15:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

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



Elfet, я бы на твоём месте просто проврял на принадлежность к прямой. А то, что мышью трудно попасть - почти решается тем, что просто изменишь курсор, когда мышь на отрезок наедет.

Добавлено @ 15:42 
хотя самое простое - вырешать уравнение прямой, y=ax+b, и смотреть совпадения точки с y=ax+b+d где d в интервале -2 до 2.
Уравнение прямой между (x1,y1) и (x2,y2) 

a=(y2-y1/x2-x1)
b=y1-a*x1

=>  y=(y2-y1/x2-x1)*x+(y1-a*x1)

Проверка, принадлежит ли точка к прямой: в функцию y=a*x+b подставляешь x точки. Если ответ совпадает с y точки, она на прямой

По моему 4 или 5 класс средней школы...

Добавлено @ 15:47 
Да, если у тебя действительно отрезок (x1,y1) (x2,y2), а не прямая, просто дополнительно проверяй точку (x,y) на х<мах(х1,х2)&&х>min(х1,х2)&&y<max(y1,y2)&&y>min(y1,y2);


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
maxim1000
Дата 30.11.2006, 15:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



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

ИМХО, из предложенных вариант со скалярным произведением наиболее прост
ну, если нужно точно задавать допустимое расстояние, то нужно будет считать расстояние от курсора до прямой


--------------------
qqq
PM WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

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


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

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


 




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


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

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