gpt4 book ai didi

ios - 两个 ARAnchors 之间的角度

转载 作者:行者123 更新时间:2023-12-01 22:19:14 27 4
gpt4 key购买 nike

我正在试验 SpriteKit 和 ARKit,想知道如何计算同一场景中两个 ARAnchor 之间的角度。

这意味着获取 anchor 在世界上的位置并计算它们定义的线与水平面(或另一个任意平面)的角度。

谢谢

最佳答案

首先,我们需要获得两个 anchor 的世界位置。这些坐标可以从每个 anchor 变换中检索,如下所示:

let transform = anchor.transform
let position = vector_float3.init(transform.columns.3.x, transform.columns.3.y, transform.columns.3.z)

现在我们可以在空间中有两个点,每个 anchor 。让我们调用他们 p1p2 .要计算与水平面的角度,我们需要第三个点。

如果我们角的顶点是 p1这个新点的 y 坐标与 p1 相同但在 p2 的下方或上方.所以:
let p2Hor = vector_float3.init(p2.x, p1.y, p2.z)

为了计算角度,我们需要从顶点( p1)到每个点( p2p2Hor)的归一化向量及其点积。那些带有 vector_float3 的操作和 simd模块相当简单。归一化向量的计算如下:
let p1ToP2Norm = normalize(p2 - p1)
let p1ToP2HorNorm = normalize(p2Hor - p1)

和点积:
let dotProduct = dot(p1ToP2Norm, p1ToP2HorNorm)

角度(以弧度为单位)为:
let angle = acos(dotProduct)

所有这些都在 vector_float3 的扩展中迅速为 ARKit:
import ARKit
import simd


extension vector_float3 {

/// Returns the angle of a line defined by to points to a horizontal plane
///
/// - Parameters:
/// - p1: p1 (vertice)
/// - p2: p2
/// - Returns: angle to a horizontal crossing p1 in radians
static func angleBetweenPointsToHorizontalPlane(p1:vector_float3, p2:vector_float3) -> Float {

///Point in 3d space on the same level of p1 but equal to p2
let p2Hor = vector_float3.init(p2.x, p1.y, p2.z)

let p1ToP2Norm = normalize(p2 - p1)
let p1ToP2HorNorm = normalize(p2Hor - p1)

let dotProduct = dot(p1ToP2Norm, p1ToP2HorNorm)

let angle = acos(dotProduct)

return angle
}
}

关于ios - 两个 ARAnchors 之间的角度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47160095/

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