2013-04-21 2 views
0

У меня есть две звездные линии.Какова точка пересечения между параметрической и декартовой линией?

Один в параметрической форме:

L1 = { 
    (x = x1 + t.a1), 
    (y = y1 + t.b1), 
    (z = z1 + t.c1) 
} 

А другой является декартовым отрезок:

L2 = { 
    (px1, py1, pz1), 
    (px2, py2, pz2) 
} 

Что такое эффективный способ найти точку пересечения двух линий?

Метод, который я могу думать:

  • Преобразовать L2 в параметрической форме
  • Решите для точки P
  • Выясните, если P лежит на L2

Однако есть более эффективным способом? Этот вопрос аналогичен https://math.stackexchange.com/questions/28503/how-to-find-intersection-of-two-lines-in-3d. Однако я заинтересован в эффективности, а не в решении.

ответ

0

Давайте d1 является вектор направления первой линии, d2 это направление вектор Whe второй линии, бб вектор между базовыми точками (бб = b2-b1).

p = (d1 x d2) (векторный продукт). Если p - нулевой вектор, то линии параллельны.

Затем вам нужно проверить, пересекаются ли линии: (bb * p) должно быть = 0 (скалярное произведение). Иначе эти линии искажены.

Точка пересечения является я = B1 + d1 * [(бб х d2) * р/(р * р)]

+0

Благодаря - я считал это, но количество операций мудр это в равной степени неэффективным, если Я использую параллельные вычисления для матричных умножений. На самом деле у меня есть сборочные свалки обоих решений. Решение вектор направления более громоздко (однако я использовал не-SSE BLAS для второго, который добавляет некоторые накладные расходы, я думаю). – tinkerbeast

Смежные вопросы