ARKit SCNVector3 和扩展不能一起工作
ARKit SCNVector3 and extensions not working together
我有一个旨在记录相机当前 X、Y、Z 坐标并将其打印出来的应用程序。它使用下面的代码正确地做到了这一点
func renderer(_ renderer: SCNSceneRenderer, willRenderScene scene: SCNScene, atTime time: TimeInterval) {
guard let pointOfView = sceneView.pointOfView else { return }
let transform = pointOfView.transform
let CamPosition = SCNVector3(transform.m41, transform.m42, transform.m43)
print(CamPosition)
我想截断打印输出,因为它很长。我发现此扩展程序可以截断值。
extension Double {
func truncate(places : Int)-> Double {
return Double(floor(pow(10.0, Double(places)) * self)/pow(10.0, Double(places)))
}
}
如果我打印这样的东西就可以了:
x = 1.123456789
print(x.truncate(places: 2))
但如果我这样打印出来就不行了:
print(camRotation.truncate(palces:2))
它给我的错误是“'SCNVector4' 类型的值没有成员 'truncate'”
这是我的格式问题还是 SCNVectors 不允许您使用扩展?
"Value of type 'SCNVector4' has no member 'truncate'"
camRotation
是 SCNVector4
.
您的分机在 Double
,而不是 SCNVector4
。
/// Double, not SCNVector4
extension Double {
func truncate(places : Int)-> Double {
return Double(floor(pow(10.0, Double(places)) * self)/pow(10.0, Double(places)))
}
}
扩展适用于任何类型,但 camRotation.truncate(palces:2)
无效,因为类型不匹配。
好的,现在进入实际答案。目前,您的代码显示
let CamPosition = SCNVector3(transform.m41, transform.m42, transform.m43)
只需将 truncate
应用于每个组件:
let CamPosition = SCNVector3(
transform.m41.truncate(places: 2),
transform.m42.truncate(places: 2),
transform.m43.truncate(places: 2)
)
print(CamPosition)
因为这些组件采用 Float
值,您还应该将扩展名更改为:
extension Float {
func truncate(places: Int) -> Float {
return Float(floor(pow(10.0, Float(places)) * self)/pow(10.0, Float(places)))
}
}
我有一个旨在记录相机当前 X、Y、Z 坐标并将其打印出来的应用程序。它使用下面的代码正确地做到了这一点
func renderer(_ renderer: SCNSceneRenderer, willRenderScene scene: SCNScene, atTime time: TimeInterval) {
guard let pointOfView = sceneView.pointOfView else { return }
let transform = pointOfView.transform
let CamPosition = SCNVector3(transform.m41, transform.m42, transform.m43)
print(CamPosition)
我想截断打印输出,因为它很长。我发现此扩展程序可以截断值。
extension Double {
func truncate(places : Int)-> Double {
return Double(floor(pow(10.0, Double(places)) * self)/pow(10.0, Double(places)))
}
}
如果我打印这样的东西就可以了:
x = 1.123456789
print(x.truncate(places: 2))
但如果我这样打印出来就不行了:
print(camRotation.truncate(palces:2))
它给我的错误是“'SCNVector4' 类型的值没有成员 'truncate'”
这是我的格式问题还是 SCNVectors 不允许您使用扩展?
"Value of type 'SCNVector4' has no member 'truncate'"
camRotation
是 SCNVector4
.
您的分机在 Double
,而不是 SCNVector4
。
/// Double, not SCNVector4
extension Double {
func truncate(places : Int)-> Double {
return Double(floor(pow(10.0, Double(places)) * self)/pow(10.0, Double(places)))
}
}
扩展适用于任何类型,但 camRotation.truncate(palces:2)
无效,因为类型不匹配。
好的,现在进入实际答案。目前,您的代码显示
let CamPosition = SCNVector3(transform.m41, transform.m42, transform.m43)
只需将 truncate
应用于每个组件:
let CamPosition = SCNVector3(
transform.m41.truncate(places: 2),
transform.m42.truncate(places: 2),
transform.m43.truncate(places: 2)
)
print(CamPosition)
因为这些组件采用 Float
值,您还应该将扩展名更改为:
extension Float {
func truncate(places: Int) -> Float {
return Float(floor(pow(10.0, Float(places)) * self)/pow(10.0, Float(places)))
}
}