Форум программистов, компьютерный форум, киберфорум
Геометрия
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.94/54: Рейтинг темы: голосов - 54, средняя оценка - 4.94
11 / 11 / 3
Регистрация: 09.05.2010
Сообщений: 384
1

Точка пересечения двух пространственных прямых?

04.08.2010, 20:46. Просмотров 10628. Ответов 13
Метки нет (Все метки)

Как найти точку пересечения пространственных прямых, заданных параметрически? Или установить что её не существует?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.08.2010, 20:46
Ответы с готовыми решениями:

Точка пересечения двух прямых
Здравствуйте форумчане! да я знаю что такие темы были но у них было конкретно заданы начальные и...

Точка пересечения двух прямых в пространстве
Помогите, пожалуйста, вывести формулу нахождения координат точки пересечения прямых в пространстве....

Точка пересечения прямых
Помогите, пожалуйста, решить некоторые задачи из самостоятельной!Завтра надо уже сдавать! Найти...

Точка пересечения прямых в пространстве
Две прямые задаются координатами начала и конца. Нужно найти точки пересечения. Попробовал...

13
11 / 11 / 3
Регистрация: 09.05.2010
Сообщений: 384
04.08.2010, 21:06  [ТС] 2
Как найти точку пересечения двух пространственных прямых, заданных параметрически? Или установить что её не существует?

Добавлено через 25 минут
Вроде составил какой-то алгоритм... И вроде бы он работает... Хотя может и не всегда...
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
int Two_Line_Intersection(TLine L1, TLine L2, T3DPoint &P)
{
  float a11 = L1.Direction.X;
  float a12 = -L2.Direction.X;
  float a21 = L1.Direction.Y;
  float a22 = -L2.Direction.Y;
  float b1  = L2.StartPoint.X - L1.StartPoint.X;
  float b2  = L2.StartPoint.Y - L1.StartPoint.Y;
  float t1, t2;
  float det = a11*a22-a12*a21;
  if (abs(det) >= EPS2)// if det != 0
  {
   float d1 = b1*a22 - a12*b2;
   float d2 = a11*b2 - a21*b1;
   t1 = d1/det; t2 = d2/det;
   float temp1 = L1.StartPoint.Z + L1.Direction.Z*t1;
   float temp2 = L2.StartPoint.Z + L2.Direction.Z*t2;
   if (abs(temp1-temp2)<EPS2) 
   {
     P.X = L1.StartPoint.X + L1.Direction.X*t1;
     P.Y = L1.StartPoint.Y + L1.Direction.Y*t1;
     P.Z = L1.StartPoint.Z + L1.Direction.Z*t1;
     return 1; // if temp1 = temp2
   }
   return 0;
  }
  a21 = L1.Direction.Z;
  a22 = -L2.Direction.Z;
  b2  = L2.StartPoint.Z - L1.StartPoint.Z;
  det = a11*a22-a12*a21;
  if (abs(det) >= EPS2)
  {
   float d1 = b1*a22 - a12*b2;
   float d2 = a11*b2 - a21*b1;
   t1 = d1/det; t2 = d2/det;
   float temp1 = L1.StartPoint.Y + L1.Direction.Y*t1;
   float temp2 = L2.StartPoint.Y + L2.Direction.Y*t2;
   if (abs(temp1-temp2)<EPS2)
   {
     P.X = L1.StartPoint.X + L1.Direction.X*t1;
     P.Y = L1.StartPoint.Y + L1.Direction.Y*t1;
     P.Z = L1.StartPoint.Z + L1.Direction.Z*t1;
     return 1; // if temp1 = temp2
   }
   return 0;   
  }
  a11 = L1.Direction.Y;
  a12 = -L2.Direction.Y;
  b1  = L2.StartPoint.Y - L1.StartPoint.Y;
  det = a11*a22-a12*a21;
  if (abs(det) >= EPS2)
  {
   float d1 = b1*a22 - a12*b2;
   float d2 = a11*b2 - a21*b1;
   t1 = d1/det; t2 = d2/det;
   float temp1 = L1.StartPoint.X + L1.Direction.X*t1;
   float temp2 = L2.StartPoint.X + L2.Direction.X*t2;
   if (abs(temp1-temp2)<EPS2)
   {
     P.X = L1.StartPoint.X + L1.Direction.X*t1;
     P.Y = L1.StartPoint.Y + L1.Direction.Y*t1;
     P.Z = L1.StartPoint.Z + L1.Direction.Z*t1;
     return 1; // if temp1 = temp2
   }
   return 0;  
  }
  return 0;
}
0
1077 / 1003 / 106
Регистрация: 28.02.2010
Сообщений: 2,889
04.08.2010, 21:30 3
Про расположение двух прямых в пространстве читаем здесь.

Теперь как находит, где они пересекаются.
Имеем прямые, которые описаны так:
http://twt.mpei.ru/math/Ang/img/AG_04050000_1.GIF (1)
В точке, где эти прямые пересекаются имеет место равенство:
x1+l1t=x2+l2t
y1+m1t=y2+n2t
z1+n1t=z2+n2t
Для нахождения t выбираем то уравнение, в котором координаты направляющих векторов одновременно не равны нулю. Значение t подставляем в любую систему уравнений из (1) и находим точку где они пересекаются.
Этот алгоритм я только-что вывел. Если что могу ошибаться.

Добавлено через 29 секунд
Ой уже код успел вставить пока я писал...

Добавлено через 7 минут
AKE, Вы лучше скажите как Вы вывели то, что написали в коде программы. А то сложно понять.
0
11 / 11 / 3
Регистрация: 09.05.2010
Сообщений: 384
04.08.2010, 21:38  [ТС] 4
Евгений М., спасибо. Я вывел это примерно основываясь на том, что вы написали. Только вот t там будут разные в левых и правых равенствах...
x1+l1t1=x2+l2t2
y1+m1t1=y2+n2t2
z1+n1t1=z2+n2t2
Я решаю одну систему из 2х уравнений относительно t1 и t2 и подставляю в третье уравнение...
0
3128 / 1321 / 156
Регистрация: 19.12.2009
Сообщений: 1,808
04.08.2010, 22:07 5
AKE, очень просто, для этого всего лишь надо записать эти уравнения в параметрическом виде
https://www.cyberforum.ru/cgi-bin/latex.cgi?\begin{cases} {x}_{1}={a}_{1}+{b}_{1}*t &   \\   ....    \\  {x}_{n}={a}_{n}+{b}_{n}*t &    \end{cases}

https://www.cyberforum.ru/cgi-bin/latex.cgi?\begin{cases} {x}_{1}={l}_{1}+{m}_{1}*\tau &   \\   ....    \\  {x}_{n}={l}_{n}+{m}_{n}*\tau &    \end{cases}
Далее в этих двух системах приравниваете первые строки и находите взаимосвязь между t и tau
Получаете линейное уравнение от двух переменных. Далее во все последующее строки второй системы подставляете вместо tau t и
находите такое значение t чтобы правая часть первой и второй системы были равны, если такое есть значит прямые пересекаются, если нету значит нет.
1
1077 / 1003 / 106
Регистрация: 28.02.2010
Сообщений: 2,889
04.08.2010, 22:27 6
Цитата Сообщение от AKE Посмотреть сообщение
Только вот t там будут разные в левых и правых равенствах
.
Да, да, да. Не учел

Добавлено через 2 минуты
Цитата Сообщение от AKE Посмотреть сообщение
Я решаю одну систему из 2х уравнений относительно t1 и t2 и подставляю в третье уравнение..
Это как? Че-то я сильно сомневаюсь что так будет правильно. Вы уверены в этом?
0
11 / 11 / 3
Регистрация: 09.05.2010
Сообщений: 384
05.08.2010, 00:04  [ТС] 7
Евгений М., из двух уравнений находим t1 и t2 подставляем их в третье если равенство соблюдается значит мы нашли точку пересечения, если нет значит таковой не существует... Какие 2 уравнения взять смотрим по определителю системы, чтобы он был отличен от нуля.
0
1077 / 1003 / 106
Регистрация: 28.02.2010
Сообщений: 2,889
05.08.2010, 05:30 8
Цитата Сообщение от AKE Посмотреть сообщение
Какие 2 уравнения взять смотрим по определителю системы, чтобы он был отличен от нуля.
Аха. Это уже обосновано.

Добавлено:
А что если ранг системы равен 1? Или почему такого не случится?
0
11 / 11 / 3
Регистрация: 09.05.2010
Сообщений: 384
05.08.2010, 17:55  [ТС] 9
Евгений М.,Если ранг равен 1 то определитель нулевой и мы берём другую систему и если у всех ранг равен 1 значит прямые параллельны...
0
1077 / 1003 / 106
Регистрация: 28.02.2010
Сообщений: 2,889
05.08.2010, 19:07 10
Хм... У меня совпадают. См. вложение.
А хотя Вы правы. Совпадающие - это частный случай параллельных.
У Вас получился пример, у которых прямые были параллельные, но не совпадающие? Че-то мне кажется, что если ранг=1 то прямые совпадают.
0
Вложения
Тип файла: pdf temp1.pdf (37.6 Кб, 190 просмотров)
1077 / 1003 / 106
Регистрация: 28.02.2010
Сообщений: 2,889
05.08.2010, 20:13 11
Я рассмотрел 2 случая, когда ранг матрицы
https://www.cyberforum.ru/cgi-bin/latex.cgi?\begin{pmatrix} l_1 & -l_2 & x_2 - x_1 \\  m_1 & -m_2 & y_2 - y_1 \\  n_1 & -n_2 & z_2 - z_1 \end{pmatrix}
равен 1.
В обеих случаях будут совпадающие прямые. Сами условия и док-во во вложении.
Но проблема с таким рангом еще не решена т.к. рассмотрены не все случаи.

Не по теме:

Почерк дает о себе знать. Но думаю идею можно понять.

0
Вложения
Тип файла: 7z 2010-08-05.7z (89.0 Кб, 31 просмотров)
11 / 11 / 3
Регистрация: 09.05.2010
Сообщений: 384
05.08.2010, 20:43  [ТС] 12
Я к сожалению не очень понял доказательство. Я говорил про определитель (и ранг) другой системы:
из
x1+l1t1=x2+l2t2
y1+m1t1=y2+m2t2
z1+n1t1=z2+n2t2
получаем:

l1 -l2
m1 -m2
n1 -n2
и отсюда я получаю определители и уравнения...
0
1077 / 1003 / 106
Регистрация: 28.02.2010
Сообщений: 2,889
06.08.2010, 00:06 13
Я вообще-то про это-же говорил.

Цитата Сообщение от AKE Посмотреть сообщение
Я к сожалению не очень понял доказательство.
А сами условия надеюсь поняли? Вообщем две строки/столбцы матрицы получаются умножением третей строки/столбца на число. Само доказательство несложное, можно самому легко вывести. Кстати там где я написал "К.в. прямой №1" означао "Канонический вид уравнения прямой №1".
1
Day
1171 / 981 / 83
Регистрация: 29.10.2009
Сообщений: 1,386
08.08.2010, 19:32 14
Немного теории.
Пусть прямые задаются точками a, b и направляющими векторами u, v
НЕОБХОДИМОЕ условие переесечения - ранг (матрицы из векторов ab, u, v) <= 2 (компланарность)
Ежели это условие выполняется, надо рассмотреть варианты:
а) Вектора u, v - неколлинеарны - есть единственное пересечение
б) Они коллинеарны.
б1) вектор ab им неколлинеарен - прямые параллельны
б2) вектор ab им коллинеарен - прямые совпадают
Вообще-то этому топику место в разделе "Математика"...
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.08.2010, 19:32

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

непонятка с формулой нахождения точки пересечения двух прямых
работающая формула и код реализации BOOL IsLinesCross(_int64 x11, _int64 y11, _int64 x12,...

Написать уравнение прямой, проходящей через точку пересечения двух прямых и параллельной OY
написать уравнение прямой, которая проходит через точку пересечения прямых 3x-2y-4=0 2x-y-3=0...

Точка пересечения двух окружностей
Здрям! Я уже вторую неделю не могу решить эту задачу. Дано: R1 = 60 Rp = 90 Xp = 63 Yp =...

Точка пересечения двух отрезков в параметрическом виде
Для курсовой работы нужна программа, определяющую точку пересечения двух отрезков. При чем...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.