Модераторы: Partizan, gambit

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проверка пересечения, Двух линий или траекторий 
V
    Опции темы
VisualProgrammerNET
Дата 17.1.2006, 01:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Почётный халявщик
**


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

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



Проблема такая...

В общем виде:
Как проверить, пересекаются ли две линии или две траектории?

Конкретно:
Начерчена на форме линия. Я заставляю некий объект перемещаться по форме. Как узнать, пересечёт ли он линию? Только узнать это надо ещё в начале его пути. Иными словами, я даю команду объекту двигаться в точку, при этом строится траектория его пути (прямая линия). Как узнать, пересекутся ли траектория и линия на форме?


--------------------
3 ГОДА НА user posted image 
PM MAIL ICQ   Вверх
Exception
Дата 17.1.2006, 01:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Дай конкретный код.
PM   Вверх
cardinal
Дата 17.1.2006, 01:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


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

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



Тут немного есть, может в тему...
http://forum.vingrad.ru/index.php?showtopic=77938


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

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


3D-маньяк
****


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

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



Если траектория сложная, надо разбить её на прямые отрезки и попарно искать пересечения каждого отрезка с каждым отрезком второй траектории.


--------------------
user posted image
PM MAIL WWW   Вверх
VisualProgrammerNET
Дата 19.1.2006, 12:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Почётный халявщик
**


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

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



Пока что кода никакого нет (в том то и дело, не знаю, что писать). Вопрос в том - как узнать пересекаются ли ВООБЩЕ две прямые линии? Конечно можно поизвращаться и сделать проверку foreach для прямых на предмет совпадения двух каких-либо точек, но наверняка есть какая-нибудь функция или даже готовый метод (вот там в примере кто-то делал через Sign. стало быть, через сигнум проверять?)


--------------------
3 ГОДА НА user posted image 
PM MAIL ICQ   Вверх
cardinal
Дата 19.1.2006, 16:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


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

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



То что в примере так это веркторная графика. А Sign просто тот факт обрабатывается, что знак нам безразличен...


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

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


Почётный халявщик
**


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

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



А есть ли какая-нибудь функция, чтобы проверить, принадлежит ли указанная мной точка прямой?


--------------------
3 ГОДА НА user posted image 
PM MAIL ICQ   Вверх
Illuminaty
Дата 20.1.2006, 13:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


/*Антон Захаров*/
***


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

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



VisualProgrammerNET, а каким уравнением у тебя прямая задается (обычно a*x + b*y + с =0)?
Если при подстановке точки в это уравнение, равенство сохраняется, то точка принадлежит прямой
PM MAIL ICQ   Вверх
VisualProgrammerNET
Дата 20.1.2006, 17:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Почётный халявщик
**


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

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



Мммм... и как мне узнать уравнение моей прямой, если я создаю её по точкам?

Ну вот например:
Код

g.DrawLine(new Pen(Color.Black, 3), 0, 0, 100, 100);

И как какое тут уравнение будет? (у меня с линейной алгеброй нелады smile )

ЗЫ. Уравнение прямой: y = kx + b

Это сообщение отредактировал(а) VisualProgrammerNET - 20.1.2006, 17:07


--------------------
3 ГОДА НА user posted image 
PM MAIL ICQ   Вверх
Illuminaty
Дата 20.1.2006, 17:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


/*Антон Захаров*/
***


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

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



если у тебя две точки (x1, y1) (x2, y2), то решаешь систему линейных уравнений
ax1 + by1 + c= 0;
ax2 + by2 + c = 0;
относительно a, b, c
Добавлено @ 17:12
Цитата(VisualProgrammerNET @ 20.1.2006, 18:06 Найти цитируемый пост)

Уравнение прямой: y = kx + b

это уравнение не сможет описать прямые, перпендикулярные оси X
Добавлено @ 17:14
Цитата(VisualProgrammerNET @ 20.1.2006, 18:06 Найти цитируемый пост)

g.DrawLine(new Pen(Color.Black, 3), 0, 0, 100, 100);

уравнение прямой: x-y=0

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


Почётный халявщик
**


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

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



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


--------------------
3 ГОДА НА user posted image 
PM MAIL ICQ   Вверх
Akina
Дата 20.1.2006, 19:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

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



Цитата(VisualProgrammerNET @ 20.1.2006, 14:10 Найти цитируемый пост)

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

Классика...
(x-x1)*(y2-y1) == (x2-x1)(y-y1)


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

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


Почётный халявщик
**


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

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



Цитата(Akina @ 20.1.2006, 19:26 Найти цитируемый пост)

(x-x1)*(y2-y1) == (x2-x1)(y-y1)


И что в этой формуле что? Куда подставлять координаты точки?



--------------------
3 ГОДА НА user posted image 
PM MAIL ICQ   Вверх
cardinal
Дата 21.1.2006, 03:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


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

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



Цитата(VisualProgrammerNET @ 20.1.2006, 15:06 Найти цитируемый пост)

g.DrawLine(new Pen(Color.Black, 3), 0, 0, 100, 100);

x1=0, x2=100, y1=0, y2=100
и получается:
(x-0)*(100-0)=(100-0)*(y-0)
x=y
x-y=0
см.
Цитата(Illuminaty @ 20.1.2006, 15:11 Найти цитируемый пост)

уравнение прямой: x-y=0




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

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


Инженер
****


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

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





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

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


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

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




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


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

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