關於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 疊加層中繪製線條和文字標籤。
單位轉換器:一個用於在公制(米/公分)和英制(英尺/英吋)之間切換的實用程式。
除了上述功能外,該應用程式還包含其他功能,例如在地化:英語、西班牙語、法語、保加利亞語和德語。計算出的距離、面積和體積以公尺為單位,可以轉換為公分、英吋、英尺。







