我想知道是否有人能够使用ARCore SDK在设备前实时识别出垂直平面。
通过定义一条线方程来定义墙,我成功地取得了不错的结果:
z = Multiplier * x + Constant (For every y)
“对于每个y”评论,我是指忽略y轴(从上面看墙壁,如房间的2D映射),以便计算定义墙壁的线条。
乘数是点之间的旋转:
let angleDeg = Float((360 - angle + 360) % 360) * Float.pi / 180.0;
全部计算如下:
let angle: Int = Int((atan2(pointA.z - pointB.z, pointA.x - pointB.x) * 180) / Float.pi) % 360
yRotation = Float((360 - angle + 360) % 360) * Float.pi / 180.0
if pointA.x == pointB.x {
multiplier = Float.infinity
} else {
multiplier = (pointA.z - pointB.z) / (pointA.x - pointB.x)
}
constant = pointA.z - multiplier * pointA.x
}
现在我在用户步行时触发计算,对许多点云中的点进行采样。
结果还不错,但与ARCore的水平面检测精度相比略有不足。