【问题标题】:How to extend a line segment in ARKit 2/SceneView如何在 ARKit 2/SceneView 中延长线段
【发布时间】:2019-02-28 12:37:36
【问题描述】:
我在空间中有两个点,并且想要一个 第三个 点,它是前两个点通过某个乘数的延伸——延伸线段。我将如何在 Swift4 中做到这一点 - 我将如何获得下面的 x2、y2、z2?
distanceMultiplier: Float = 1.2
var segmentStart = simd_float3.init()
segmentStart.x = X0
segmentStart.y = Y0
segmentStart.z = Z0
var segmentEnd1 = simd_float3.init()
segmentEnd1.x = X1
segmentEnd1.y = Y1
segmentEnd1.z = Z1
var segmentEnd2 = simd_float3.init()
//segmentEnd1.x2 = foo
//segmentEnd1.y2 = foobar
//segmentEnd1.z2 = barfoo
【问题讨论】:
标签:
swift
3d
scenekit
arkit
【解决方案1】:
首先,它纯粹是一种风格的选择,但你不需要把所有的东西都手写。例如,typename.init() 始终可以缩写为 typename()。并且 SIMD 类型在 Swift 中都可以在没有 simd_ 前缀的情况下工作。向量类型也有元素初始化器:
let segmentStart = float3(x0, y0, z0)
无论如何,这里真正的问题只是基础数学。描述两点之间(长度)线段的向量是两点的差:
let segmentLength = segmentEnd1 - segmentStart
要描述整个片段,您需要知道它的起点和长度(两个向量)或其起点和终点(也是两个向量)。如果您有其中任何一对,则可以在它们之间进行转换。
assert(segmentEnd1 == segmentStart + segmentLength)
如果你想扩展一个段,你需要原点 + 长度表示。
let segmentLength2 = segmentLength * multiplier
一旦你有了它,你就可以转换回开始/端点表示:
let segmentEnd2 = segmentStart + segmentLength2
一旦说明就很容易看到(这里是 2D,但无论你有多少维度,数学都是一样的):