![]() |
|
|
![]()
|
|
| ZufuS |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 237 Регистрация: 12.7.2006 Репутация: нет Всего: нет |
Есть две прямые в плоскости, задающиеся парами точек. Надо найти точку пересечения этих прямых.
|
|||
|
||||
| cardinal |
|
|||
![]() Инженер ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6003 Регистрация: 26.3.2002 Где: Германия Репутация: 5 Всего: 99 |
точка1 + x * (точка2-точка1) = точка3 + y * (точка4-точка3)
Все в векторном представлении. Решив уравнение получишь точку пересечения... Это сообщение отредактировал(а) cardinal - 25.3.2007, 17:07 -------------------- Немецкая оппозиция потребовала упростить натурализацию иммигрантов В моем блоге: Разные истории из жизни в Германии "Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино". А. и Б. Стругацкие |
|||
|
||||
| ZufuS |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 237 Регистрация: 12.7.2006 Репутация: нет Всего: нет |
Допустим дано
(1,1) (4,3) (1,5) (3,1) Если я правильно понял - (1,1) - точка 1 (4,3) - точка 2 (1,5) - точка 3 (3,1) - точка 4 получается (1,1) + x*(3,2) = (1,5) + x*(2,-4) (1,1) - (1,5) = x* ( (2,-4) - (3,2) ) x*(-1,-6) = (0,-4) что делать дальше - не знаю. х - это точка или число? может в правой части должен быть y? |
|||
|
||||
| maxim1000 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 33 Всего: 110 |
скорее, точка1 + x * (точка2-точка1) = точка3 + y * (точка4-точка3) параметры необязательно должны совпадать тогда получается уже система из двух уравнений для двух неизвестных -------------------- qqq |
|||
|
||||
| Bitter |
|
|||
![]() Опытный лентяй ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1209 Регистрация: 15.8.2004 Где: Харьков, Ukraine Репутация: 4 Всего: 27 |
Вот рабочий алгоритм:
1. Дано 4 точки отрезков А,B,C,D 2. Находим b = B - A (т.е. b.x = B.x - A.x и b.y = B.y - A.y) 3. Находим d = D - C 4. Находим с = C - A 5. Поворачиваем d (т.е. находим нормаль) dd.x = -d.y dd.y = d.x 6. Точка пересечения отрезков: I = A + ( (ddхc) / (ddхb) )*b скалярное произведение векторов (х) считается так: ddxc = dd.x*c.x + dd.y*c.y Правда, тут есть одна тонкость: отрезки могут быть парралельными или просто не доставать друг до друга. Чтобы узнать это нужно нужно расчитать еще одну величину: u = (bbхc) / (ddхb) и t = (ddхc) / (ddхb) Если t>1 или <0? то отрезки не достают друг до друга, если ddxb=0, отрезки параллельны. Теперь формулу можно упростить так: I=A+t*b Операцию х можно сделать функцией |
|||
|
||||
| cardinal |
|
|||
![]() Инженер ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6003 Регистрация: 26.3.2002 Где: Германия Репутация: 5 Всего: 99 |
Да. Подправил.
Это система уравнений 1+3x = 1+2y 1+2x= 5-4y Отсюда x=1/2, y=3/4 Точку пересечения получаешь либо отсюда (1,1) + x*(3,2) либо отсюда (1,5) + y*(2,-4) Она равна (5/2, 2) Извиняюсь за ошибку с параметром... -------------------- Немецкая оппозиция потребовала упростить натурализацию иммигрантов В моем блоге: Разные истории из жизни в Германии "Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино". А. и Б. Стругацкие |
|||
|
||||
| ZufuS |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 237 Регистрация: 12.7.2006 Репутация: нет Всего: нет |
(2,3) (7,10)
(9,-2) (6,1) Если эти прямые нарисовать, будет видно, что точка пересечения находится вблизи точки (3,4). (2,3) + x*(5,7) = (9,-2) + y*(-3,3) 2+5x = 3+7y 9-3x = -2+3y y = (11/3)-x 2+5x = 3+7((11/3)-x) 2+5x = 3+77/3-7x 12x = 1+77/3 x= 80/36 = 20/9 y= (11/3)-20/9 = 13/9 В одном случае получается (2,3) + (20/9)*(5,7) = (13.11, 18.56) В другом (9,-2) + (13/9)*(-3,3) = (4.67, 2.33) Где я ошибся? Это сообщение отредактировал(а) ZufuS - 26.3.2007, 02:53 |
|||
|
||||
| ZufuS |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 237 Регистрация: 12.7.2006 Репутация: нет Всего: нет |
Алгоритм Bitter'a работает, спасибо.
|
|||
|
||||
| MBo |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 234 Регистрация: 10.6.2002 Репутация: 5 Всего: 18 |
Вот то, что cardinal написал, чуть более развернуто:
http://algolist.manual.ru/maths/geom/inter.../lineline2d.php Стоит освоить параметрическое представление, сильно упростит жизнь. |
|||
|
||||
![]()
|
| Правила форума "Алгоритмы" | |
|
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Алгоритмы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |