关于ARCore Measurment for Android
该应用程序使用 AR Core 来测量距离、面积和体积。
1. 测量距离
距离是增强现实 (AR) 中最基本的测量。它通过计算放置在 AR 场景中的两个 3D 坐标点(锚点)之间的欧氏距离来获得。
2. 测量面积
要测量面积,用户必须放置至少三个锚点以形成一个多边形。大多数 AR 面积测量都假设表面是一个平面(3D 空间中的 2D 表面)。
算法:
最常用的方法是鞋带公式(测量员公式)。由于点位于 3D 空间中,您应该首先将它们投影到 2D 平面上(使用平面的法线),或者确保所有点都位于检测到的同一个 AR 核心平面上。
3. 测量体积
体积测量要复杂得多,因为它需要考虑深度。有两种主要方法可以实现体积测量:
- 盒式法(拉伸法):测量地面面积(如上所述),然后测量垂直距离(高度)。
公式:体积 = 面积 × 高度
- 边界框方法:使用两个对角顶点定义一个 3D 立方体。
- 深度 API(高级):使用 AR Core 创建物体的点云,并通过凸包或体素化计算体积。这种方法对于不规则物体来说精度更高,但需要配备飞行时间传感器或高质量深度支持的设备。
既然您正在深入实现,那么 AR Core 的真正挑战不仅仅在于数学计算,还在于用户体验和精度。在 2D 屏幕上测量 3D 空间对用户来说可能比较麻烦。
以下是如何构建这些功能的 Java 逻辑:
1. 距离(基础)
为了获得精确的测量结果,您应该使用 Session hit Test() 来放置锚点。使用锚点可以确保即使相机发生漂移,这些点仍然“锁定”到物理世界的坐标系中。
2. 面积(平面几何)
对于面积测量,用户通常想要测量地板或墙壁。您应该将点限制在单个平面上。如果这些点位于同一水平面上(y 值几乎相同),您可以忽略 y 轴,并将其视为二维多边形计算。
实现技巧:将您的点存储在 List 中。当用户添加新点时,动态更新“当前面积”预览。鞋带公式是这里的标准公式,因为它适用于任何非自相交多边形(不规则形状)。
3. 体积(“盒子”方法)
如果没有 LiDAR 传感器,计算任意 3D 对象的体积非常困难。对于标准的 Java AR Core 应用,最可靠的方法是拉伸多边形方法:
1. 定义底面:用户点击点来定义地板面积 (A)。
2. 定义高度:用户点击地板上的一个点并向上拖动一条线,或者点击天花板上的一个点 (h)。
3. 计算:V = A * h。
提高精度的技巧
深度 API:如果设备支持,请启用原始深度 API。它允许您对“非平面”物体(例如沙发或球)进行命中测试,而标准的平面检测方法可能会漏检这些物体。
平滑处理:AR 坐标可能会抖动。对相机姿态或命中测试结果使用简单的移动平均滤波器,以防止测量值快速跳动。
建议架构
测量管理器:一个单例或辅助类,用于存储活动锚点的列表。
渲染器:负责在 AR 叠加层中绘制线条和文本标签。
单位转换器:一个用于在公制(米/厘米)和英制(英尺/英寸)之间切换的实用程序。
除了上述功能外,该应用程序还包含其他功能,例如本地化:英语、西班牙语、法语、保加利亚语和德语。计算出的距离、面积和体积以米为单位,可以转换为厘米、英寸、英尺。












