来自 ARKit 的四舍五入位置数据
Rounding positional data from ARKit
我有这段代码可以从 ARKit 中的每一帧获取 X、Y、Z 位置。
let CamPosition = SCNVector3(transform.m41, transform.m42, transform.m43)
我如何将数字四舍五入,因为它们偶尔会以这样的科学记数法输出?
SCNVector3(x: 7.276927e-09, y: 2.4679738e-09, z: 3.395949e-10)
而不是像这样的期望输出:
SCNVector3(x: 0.026048008, y: 0.0069037788, z: 0.010655182)
非常感谢任何帮助!
四舍五入为米
为此你可以使用三个神圣的方法:round(_:), and ceil(_:), and floor(_:)。
import SceneKit
import Foundation
let node = SCNNode()
node.position = SCNVector3(x: floor(12.856288),
y: ceil(67.235459),
z: round(34.524305))
node.position.x // 12
node.position.y // 68
node.position.z // 35
将 XYZ 值四舍五入为整数,使它们以米为单位间歇(离散)转换。
四舍五入到厘米
将 XYZ 值四舍五入到小数点后两位:
node.position = SCNVector3(x: round(12.856288 * 100) / 100.0,
y: round(67.235459 * 100) / 100.0,
z: round(34.524305 * 100) / 100.0)
node.position.x // 12.86 (hundredths)
node.position.y // 67.24
node.position.z // 34.52
在我看来,您正在尝试修复不需要修复的问题。
从这个very comprehensive answer可以看出,计算机只是不擅长存储一些十进制数,所以你得到的是可以用二进制表示的最近邻。
除非这会导致您出现功能问题,否则我建议您忽略它。如果问题是您的调试日志中的数字不容易解析,请使用数字格式化程序。
我有这段代码可以从 ARKit 中的每一帧获取 X、Y、Z 位置。
let CamPosition = SCNVector3(transform.m41, transform.m42, transform.m43)
我如何将数字四舍五入,因为它们偶尔会以这样的科学记数法输出?
SCNVector3(x: 7.276927e-09, y: 2.4679738e-09, z: 3.395949e-10)
而不是像这样的期望输出:
SCNVector3(x: 0.026048008, y: 0.0069037788, z: 0.010655182)
非常感谢任何帮助!
四舍五入为米
为此你可以使用三个神圣的方法:round(_:), and ceil(_:), and floor(_:)。
import SceneKit
import Foundation
let node = SCNNode()
node.position = SCNVector3(x: floor(12.856288),
y: ceil(67.235459),
z: round(34.524305))
node.position.x // 12
node.position.y // 68
node.position.z // 35
将 XYZ 值四舍五入为整数,使它们以米为单位间歇(离散)转换。
四舍五入到厘米
将 XYZ 值四舍五入到小数点后两位:
node.position = SCNVector3(x: round(12.856288 * 100) / 100.0,
y: round(67.235459 * 100) / 100.0,
z: round(34.524305 * 100) / 100.0)
node.position.x // 12.86 (hundredths)
node.position.y // 67.24
node.position.z // 34.52
在我看来,您正在尝试修复不需要修复的问题。
从这个very comprehensive answer可以看出,计算机只是不擅长存储一些十进制数,所以你得到的是可以用二进制表示的最近邻。
除非这会导致您出现功能问题,否则我建议您忽略它。如果问题是您的调试日志中的数字不容易解析,请使用数字格式化程序。