gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-11-01 06:57:44 24 4
gpt4 key购买 nike

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

最佳答案

首先,这纯粹是一种风格选择,但您不需要手写所有内容。例如,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

一旦说明就很容易看到(这里是二维的,但无论你有多少维度,数学都是一样的):

enter image description here

关于swift - 如何在 ARKit 2/SceneView 中扩展线段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52488833/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com