如何在ARKit 2 / SceneView中扩展线段

时间:2018-09-25 00:03:05

标签: swift 3d scenekit arkit

我在空间中有两个点,并且想要一个第三点,该点是前两个点的乘数的扩展-延长线段。我将如何在Swift4中做到这一点-如何在下面获得x2y2z2

    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

1 个答案:

答案 0 :(得分:2)

首先,它纯粹是样式的选择,但是您不需要花太多时间写所有东西。例如,typename.init()始终可以缩写为typename()。在Swift中,SIMD类型都可以在没有simd_前缀的情况下工作。向量类型也具有逐元素的初始化程序:

let segmentStart = float3(x0, y0, z0)

无论如何,这里的真正问题只是基础数学。描述两个点之间(线段的长度)的向量是两个点的差:

let segmentLength = segmentEnd1 - segmentStart

要描述整个段,您需要知道其起点和长度(两个向量)或起点和终点(也两个向量)。如果您有这两个对中的任何一个,都可以在它们之间进行转换。

assert(segmentEnd1 == segmentStart + segmentLength)

如果要扩展线段,则需要原点+长度表示。

let segmentLength2 = segmentLength * multiplier

有了这些,就可以转换回起点/终点表示形式:

let segmentEnd2 = segmentStart + segmentLength2

一旦说明就很容易看到(这里是2D,但是无论有多少尺寸,数学都是相同的):

enter image description here