Параметризация линии 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;