如何计算两个 AnchorEntities 之间的距离?

How can I calculate a distance between two AnchorEntities?

有个位置是SIMD3 还有 AnchorEntity。我想知道两者之间的距离。

我是怎么做到的:

var distance = distance(position, (self.modelentity.position(relativeTo:nil))
var distance = distance(position, (self.modelentity.position)

但都失败了,因为它似乎计算的是世界原点锚点之间的距离,而不是到 self.modelentity 的位置之间的距离。

如何计算距离?

理论

在 RealityKit 2.0 中有点棘手。实体相对于其父实体的位置是:

public var position: SIMD3<Float>

// the same as:     entity.transform.translation

但在您的情况下,它不适用于没有父项的 AnchorEntity。实际上 起作用的 是一个实例方法 returns 实体相对于 referenceEntity 的位置(即使它是nil, 因为 nil 暗示了一个世界 space):

public func position(relativeTo referenceEntity: Entity?) -> SIMD3<Float>

解决方案

import UIKit
import RealityKit

class ViewController: UIViewController {
    
    @IBOutlet var arView: ARView!
    
    let anchor_01 = AnchorEntity(world: [ 1.22, 1.47,-2.75])
    let anchor_02 = AnchorEntity(world: [-2.89, 0.15, 1.46])
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        arView.scene.anchors.append(anchor_01)
        arView.scene.anchors.append(anchor_02)

        let dst = distanceBetweenEntities(anchor_01.position(relativeTo: nil), 
                                     and: anchor_02.position(relativeTo: nil))
                
        print("The distance is: \(dst)")                    // WORKS
        print("The position is: \(anchor_01.position)")     // doesn't work
    }
    
    private func distanceBetweenEntities(_ a: SIMD3<Float>, 
                                       and b: SIMD3<Float>) -> SIMD3<Float> {
        
        var distance: SIMD3<Float> = [0, 0, 0]                   
        distance.x = abs(a.x - b.x)
        distance.y = abs(a.y - b.y)
        distance.z = abs(a.z - b.z)         
        return distance
    }
}

结果:

// The distance is:  SIMD3<Float>(4.11, 1.32, 4.21)

// The position is:  SIMD3<Float>(0.0, 0.0, 0.0)