Найти трехмерные координаты точки на прямой, спроецированной из другой точки в трехмерном пространстве - PullRequest
0 голосов
/ 15 октября 2018

Работа в Swift, ARTKit / SceneKit

enter image description here

У меня есть линия AB в 3d, и у меня есть координаты xyz обеих точек A и B.У меня также есть точка C, и я тоже знаю ее координаты xyz.

Теперь я хочу узнать координаты xyz точки D на линии AB;учитывая, что CD перпендикулярен AB.

Какой простой способ сделать это в Swift.

1 Ответ

0 голосов
/ 15 октября 2018

Параметризация линии AB с помощью скаляра t:

P(t) = A + (B - A) * t`

Точка D = P(t) такова, что CD перпендикулярен AB, то есть их точечное произведение равно нулю:

dot(C - D, B - A) = 0

dot(C - A - (B - A) * t, B - A) = 0

dot(C - A, B - A) = t * dot(B - A, B - A)

// Substitute value of t

-->  D = A + (B - A) * dot(C - A, B - A) / dot(B - A, B - A)

Код Swift:

var BmA = B - A
var CmA = C - A
var t = dot(CmA, BmA) / dot(BmA, BmA)
var D = A + BmA * t;
...