在3D空间中从另一点投影的线上找到点的3D坐标

时间:2018-10-15 18:22:23

标签: swift 3d scenekit arkit

在Swift,ARTKit / SceneKit中工作

enter image description here

我在3d中有一条线AB,并且我有两个点A和B的xyz坐标。 我也有一个点C,我也知道它的xyz坐标。

现在,我想找出AB线上D点的xyz坐标;鉴于CD垂直于AB。

在Swift中做这件事的简单方法是什么。

1 个答案:

答案 0 :(得分:2)

使用标量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)

快捷代码:

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