如何计算两个 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)
有个位置是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)