![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| VisualProgrammerNET |
|
|||
![]() Почётный халявщик ![]() ![]() Профиль Группа: Участник Сообщений: 461 Регистрация: 30.10.2005 Где: Зеленоград Репутация: 4 Всего: 6 |
Проблема такая...
В общем виде: Как проверить, пересекаются ли две линии или две траектории? Конкретно: Начерчена на форме линия. Я заставляю некий объект перемещаться по форме. Как узнать, пересечёт ли он линию? Только узнать это надо ещё в начале его пути. Иными словами, я даю команду объекту двигаться в точку, при этом строится траектория его пути (прямая линия). Как узнать, пересекутся ли траектория и линия на форме? -------------------- 3 ГОДА НА |
|||
|
||||
| Exception |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 4525 Регистрация: 26.12.2004 Репутация: 29 Всего: 186 |
Дай конкретный код.
|
|||
|
||||
| cardinal |
|
|||
![]() Инженер ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6003 Регистрация: 26.3.2002 Где: Германия Репутация: нет Всего: 99 |
-------------------- Немецкая оппозиция потребовала упростить натурализацию иммигрантов В моем блоге: Разные истории из жизни в Германии "Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино". А. и Б. Стругацкие |
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
Если траектория сложная, надо разбить её на прямые отрезки и попарно искать пересечения каждого отрезка с каждым отрезком второй траектории.
-------------------- ![]() |
|||
|
||||
| VisualProgrammerNET |
|
|||
![]() Почётный халявщик ![]() ![]() Профиль Группа: Участник Сообщений: 461 Регистрация: 30.10.2005 Где: Зеленоград Репутация: 4 Всего: 6 |
Пока что кода никакого нет (в том то и дело, не знаю, что писать). Вопрос в том - как узнать пересекаются ли ВООБЩЕ две прямые линии? Конечно можно поизвращаться и сделать проверку foreach для прямых на предмет совпадения двух каких-либо точек, но наверняка есть какая-нибудь функция или даже готовый метод (вот там в примере кто-то делал через Sign. стало быть, через сигнум проверять?)
-------------------- 3 ГОДА НА |
|||
|
||||
| cardinal |
|
|||
![]() Инженер ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6003 Регистрация: 26.3.2002 Где: Германия Репутация: нет Всего: 99 |
То что в примере так это веркторная графика. А Sign просто тот факт обрабатывается, что знак нам безразличен...
-------------------- Немецкая оппозиция потребовала упростить натурализацию иммигрантов В моем блоге: Разные истории из жизни в Германии "Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино". А. и Б. Стругацкие |
|||
|
||||
| VisualProgrammerNET |
|
|||
![]() Почётный халявщик ![]() ![]() Профиль Группа: Участник Сообщений: 461 Регистрация: 30.10.2005 Где: Зеленоград Репутация: 4 Всего: 6 |
А есть ли какая-нибудь функция, чтобы проверить, принадлежит ли указанная мной точка прямой?
-------------------- 3 ГОДА НА |
|||
|
||||
| Illuminaty |
|
|||
![]() /*Антон Захаров*/ ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1238 Регистрация: 19.3.2005 Где: Россия, Казань Репутация: 1 Всего: 56 |
VisualProgrammerNET, а каким уравнением у тебя прямая задается (обычно a*x + b*y + с =0)?
Если при подстановке точки в это уравнение, равенство сохраняется, то точка принадлежит прямой |
|||
|
||||
| VisualProgrammerNET |
|
|||
![]() Почётный халявщик ![]() ![]() Профиль Группа: Участник Сообщений: 461 Регистрация: 30.10.2005 Где: Зеленоград Репутация: 4 Всего: 6 |
Мммм... и как мне узнать уравнение моей прямой, если я создаю её по точкам?
Ну вот например:
И как какое тут уравнение будет? (у меня с линейной алгеброй нелады ЗЫ. Уравнение прямой: y = kx + b Это сообщение отредактировал(а) VisualProgrammerNET - 20.1.2006, 17:07 -------------------- 3 ГОДА НА |
|||
|
||||
| Illuminaty |
|
|||
![]() /*Антон Захаров*/ ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1238 Регистрация: 19.3.2005 Где: Россия, Казань Репутация: 1 Всего: 56 |
если у тебя две точки (x1, y1) (x2, y2), то решаешь систему линейных уравнений
ax1 + by1 + c= 0; ax2 + by2 + c = 0; относительно a, b, c Добавлено @ 17:12 это уравнение не сможет описать прямые, перпендикулярные оси X Добавлено @ 17:14 уравнение прямой: x-y=0 |
|||
|
||||
| VisualProgrammerNET |
|
|||
![]() Почётный халявщик ![]() ![]() Профиль Группа: Участник Сообщений: 461 Регистрация: 30.10.2005 Где: Зеленоград Репутация: 4 Всего: 6 |
Нашёл я, кажется, способ... через синусы углов и длины прямых... если до ума доведу, выложу, что получилось
-------------------- 3 ГОДА НА |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: нет Всего: 454 |
Классика... (x-x1)*(y2-y1) == (x2-x1)(y-y1) -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| VisualProgrammerNET |
|
|||
![]() Почётный халявщик ![]() ![]() Профиль Группа: Участник Сообщений: 461 Регистрация: 30.10.2005 Где: Зеленоград Репутация: 4 Всего: 6 |
И что в этой формуле что? Куда подставлять координаты точки? -------------------- 3 ГОДА НА |
|||
|
||||
| cardinal |
|
|||
![]() Инженер ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6003 Регистрация: 26.3.2002 Где: Германия Репутация: нет Всего: 99 |
x1=0, x2=100, y1=0, y2=100 и получается: (x-0)*(100-0)=(100-0)*(y-0) x=y x-y=0 см. -------------------- Немецкая оппозиция потребовала упростить натурализацию иммигрантов В моем блоге: Разные истории из жизни в Германии "Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино". А. и Б. Стругацкие |
|||
|
||||
| cardinal |
|
|||
![]() Инженер ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6003 Регистрация: 26.3.2002 Где: Германия Репутация: нет Всего: 99 |
-------------------- Немецкая оппозиция потребовала упростить натурализацию иммигрантов В моем блоге: Разные истории из жизни в Германии "Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино". А. и Б. Стругацкие |
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |