Поиск:

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


Бывалый
*


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

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



Есть две прямые в плоскости, задающиеся парами точек. Надо найти точку пересечения этих прямых.
PM   Вверх
cardinal
Дата 25.3.2007, 05:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


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

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



точка1 + x * (точка2-точка1) = точка3 + y * (точка4-точка3)

Все в векторном представлении. Решив уравнение получишь точку пересечения...

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


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

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


Бывалый
*


Профиль
Группа: Участник
Сообщений: 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?
PM   Вверх
maxim1000
Дата 25.3.2007, 15:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(cardinal @  25.3.2007,  04:26 Найти цитируемый пост)
точка1 + x * (точка2-точка1) = точка3 + x * (точка4-точка3)

скорее, точка1 + x * (точка2-точка1) = точка3 + y * (точка4-точка3)
параметры необязательно должны совпадать
тогда получается уже система из двух уравнений для двух неизвестных


--------------------
qqq
PM WWW   Вверх
Bitter
Дата 25.3.2007, 16:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный лентяй
***


Профиль
Группа: Завсегдатай
Сообщений: 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

Операцию х можно сделать функцией
PM MAIL ICQ Skype   Вверх
cardinal
Дата 25.3.2007, 17:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


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

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



Цитата(maxim1000 @  25.3.2007,  13:03 Найти цитируемый пост)
параметры необязательно должны совпадать

Да. Подправил.
Цитата(ZufuS @  25.3.2007,  12:54 Найти цитируемый пост)
что делать дальше - не знаю. 

Цитата

Допустим дано
(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) + y*(2,-4)

Это система уравнений
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)

Извиняюсь за ошибку с параметром...


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

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


Бывалый
*


Профиль
Группа: Участник
Сообщений: 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
PM   Вверх
ZufuS
Дата 26.3.2007, 03:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Алгоритм Bitter'a работает, спасибо. 
PM   Вверх
MBo
Дата 26.3.2007, 04:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Вот то, что cardinal написал, чуть более развернуто:

http://algolist.manual.ru/maths/geom/inter.../lineline2d.php

Стоит освоить параметрическое представление, сильно упростит жизнь.

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

maxim1000

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


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

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


 




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


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

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