我在空间中有两个点,并且想要一个第三点,该点是前两个点的乘数的扩展-延长线段。我将如何在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
答案 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,但是无论有多少尺寸,数学都是相同的):