【问题标题】:How to extend a line segment in ARKit 2/SceneView如何在 ARKit 2/SceneView 中延长线段
【发布时间】:2019-02-28 12:37:36
【问题描述】:

我在空间中有两个点,并且想要一个 第三个​​ 点,它是前两个点通过某个乘数的延伸——延伸线段。我将如何在 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

【问题讨论】:

    标签: 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,但无论你有多少维度,数学都是一样的):

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-24
      • 2016-03-05
      • 1970-01-01
      • 2019-05-03
      • 2018-04-19
      • 2012-04-14
      相关资源
      最近更新 更多