如何提高ARKit测量两个SCNNode之间距离的准确性?

时间:2019-01-30 07:52:48

标签: ios swift ipad arkit

有人知道如何改善ARKit中的测量。

我当前的ARConfiguration是:

    let configuration = ARWorldTrackingConfiguration()
    configuration.maximumNumberOfTrackedImages = 10
    configuration.environmentTexturing = .automatic

    configuration.planeDetection = [.horizontal , .vertical]
    configuration.isLightEstimationEnabled = true
    configuration.worldAlignment = .gravity

我尝试计算两个SCNNode之间的距离。有什么方法可以改善这一点?我尝试计算2m-10m之间的距离。有时候偏差对我来说太高了(30 cm +)。

是否可以使用这些平面来提高精度?还是其他想法?

感谢帮助。

1 个答案:

答案 0 :(得分:0)

SCNNodes已在载体的位置看到documentation

从两个场景节点的这两个属性,您可以使用简单的物理方法计算它们之间的距离。例如你可以计算二维的距离,在3D世界的距离。一个例子可以用这些2个分机完成。

extension SCNVector3 {
    static func distanceFrom(vector vector1: SCNVector3, toVector vector2: SCNVector3) -> Float {
        let x0 = vector1.x
        let x1 = vector2.x
        let y0 = vector1.y
        let y1 = vector2.y
        let z0 = vector1.z
        let z1 = vector2.z

        return sqrtf(powf(x1-x0, 2) + powf(y1-y0, 2) + powf(z1-z0, 2))
    }
}

然后在主类中可以像这样调用静态函数

let scnNode1 = SCNNode() //Your test node
let scnNode2 = SCNNode() //Your test node
let distance = SCNVector3.distanceFrom(vector: scnNode1.position, toVector: scnNode2.position)