| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Общие вопросы по .NET и C# > Проверка пересечения |
| Автор: VisualProgrammerNET 17.1.2006, 01:25 |
| Проблема такая... В общем виде: Как проверить, пересекаются ли две линии или две траектории? Конкретно: Начерчена на форме линия. Я заставляю некий объект перемещаться по форме. Как узнать, пересечёт ли он линию? Только узнать это надо ещё в начале его пути. Иными словами, я даю команду объекту двигаться в точку, при этом строится траектория его пути (прямая линия). Как узнать, пересекутся ли траектория и линия на форме? |
| Автор: Exception 17.1.2006, 01:31 |
| Дай конкретный код. |
| Автор: cardinal 17.1.2006, 01:33 |
| Тут немного есть, может в тему... http://forum.vingrad.ru/index.php?showtopic=77938 |
| Автор: mr.DUDA 17.1.2006, 08:46 |
| Если траектория сложная, надо разбить её на прямые отрезки и попарно искать пересечения каждого отрезка с каждым отрезком второй траектории. |
| Автор: VisualProgrammerNET 19.1.2006, 12:08 |
| Пока что кода никакого нет (в том то и дело, не знаю, что писать). Вопрос в том - как узнать пересекаются ли ВООБЩЕ две прямые линии? Конечно можно поизвращаться и сделать проверку foreach для прямых на предмет совпадения двух каких-либо точек, но наверняка есть какая-нибудь функция или даже готовый метод (вот там в примере кто-то делал через Sign. стало быть, через сигнум проверять?) |
| Автор: cardinal 19.1.2006, 16:24 |
| То что в примере так это веркторная графика. А Sign просто тот факт обрабатывается, что знак нам безразличен... |
| Автор: VisualProgrammerNET 20.1.2006, 13:10 |
| А есть ли какая-нибудь функция, чтобы проверить, принадлежит ли указанная мной точка прямой? |
| Автор: Illuminaty 20.1.2006, 13:13 |
| VisualProgrammerNET, а каким уравнением у тебя прямая задается (обычно a*x + b*y + с =0)? Если при подстановке точки в это уравнение, равенство сохраняется, то точка принадлежит прямой |
| Автор: VisualProgrammerNET 20.1.2006, 17:06 | ||
| Мммм... и как мне узнать уравнение моей прямой, если я создаю её по точкам? Ну вот например:
И как какое тут уравнение будет? (у меня с линейной алгеброй нелады ЗЫ. Уравнение прямой: y = kx + b |
| Автор: Illuminaty 20.1.2006, 17:11 |
| если у тебя две точки (x1, y1) (x2, y2), то решаешь систему линейных уравнений ax1 + by1 + c= 0; ax2 + by2 + c = 0; относительно a, b, c Добавлено @ 17:12 это уравнение не сможет описать прямые, перпендикулярные оси X Добавлено @ 17:14 уравнение прямой: x-y=0 |
| Автор: VisualProgrammerNET 20.1.2006, 18:37 |
| Нашёл я, кажется, способ... через синусы углов и длины прямых... если до ума доведу, выложу, что получилось |
| Автор: VisualProgrammerNET 20.1.2006, 22:24 |
| И что в этой формуле что? Куда подставлять координаты точки? |
| Автор: cardinal 21.1.2006, 03:03 |
| x1=0, x2=100, y1=0, y2=100 и получается: (x-0)*(100-0)=(100-0)*(y-0) x=y x-y=0 см. |
| Автор: cardinal 23.1.2006, 03:22 |
| Кстати вот: http://worldcpp.vingrad.ru/alg/zdrt91.php |
| Автор: Empirik 23.1.2006, 12:39 |
| посмотри еще информацию о GraphicsPath( System.Drawing.Drawing2D.GraphicsPath). В нем есть методы позволяющие проверить попадание точки в заданную область, описываемую данным графическим путем. Так же в его состав можно добавить линию, и другие фигуры, может тебе данный класс подойдет |
| Автор: VisualProgrammerNET 24.1.2006, 15:15 |
| Thanx 2 Empirik. |