Как повысить точность ARKit для измерения расстояний между двумя узлами SCN? - PullRequest
0 голосов
/ 30 января 2019

Кто-нибудь знает, как улучшить измерение в ARKit.

Моя текущая конфигурация ARConfiguration:

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

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

Я пытаюсь вычислить расстояние между двумя узлами SCN.Есть ли способы улучшить это?Я пытаюсь рассчитать расстояния между 2 м - 10 м.Иногда отклонение слишком велико для меня (30 см +).

Можно ли использовать самолеты для повышения точности?Или другие идеи?

Спасибо за помощь.

1 Ответ

0 голосов
/ 30 января 2019

Узлы SCN имеют позиции в векторах, см. документацию

Из этих двух свойств ваших двух сцен вы можете вычислить расстояние между ними с помощью простой физики.Например, вы можете вычислить расстояние в 2D и расстояние в 3D мире.Пример можно сделать с этими двумя расширениями.

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)
...