Спасибо за оценки и отзывы!
Вы уже оценили.
Измерение расстояния, площади и объема (DAV) без AR Core
Метод с использованием тригонометрии и датчиков (геометрия)
Это наиболее распространенный способ измерения расстояния без дополненной реальности. Он использует высоту, на которой пользователь держит телефон (h), и угол наклона (θ), определяемый акселерометром.
Как это работает:
Если пользователь направляет камеру на основание объекта, расстояние рассчитывается по формуле:
d = h⋅tan(90 − θ )
Ключевые шаги в приложении:
SensorManager используется для доступа к Sensor.TYPE_ACCELEROMETER и Sensor.TYPE_MAGNETIC_FIELD. Рассчитывается угол наклона устройства (θ). Перед этим пользователь выбирает высоту, на которой он держит телефон.
Это самый простой способ выполнить программный расчет без сложной 3D-обработки, но он требует от пользователя соблюдения определенной последовательности действий.
Как это работает:
Если пользователь направляет камеру на основание объекта, расстояние рассчитывается по формуле:
d = h⋅tan(90 − θ )
Ключевые шаги в приложении:
Для доступа к Sensor.TYPE_ACCELEROMETER и Sensor.TYPE_MAGNETIC_FIELD используется SensorManager. Рассчитывается угол наклона устройства (θ). Проблема этого метода:
Если пользователь неподвижен и просто отмечает две точки перед собой, приложение не может определить угол между ними, основываясь только на расстоянии. Для математической точности необходимо также использовать азимут компаса.
Более точный код на Java для области (с углом):
Если вы хотите, чтобы пользователь отметил 2 точки в одном и том же месте, вам нужно вычислить угол поворота телефона между двумя измерениями.
// В методе onSensorChanged мы также записываем азимут (orientation[0])
float currentAzimuth;
// Когда точка зафиксирована, мы записываем расстояние И угол
double d1 = capturedDistances.get(0);
double d2 = capturedDistances.get(1);
double angleBetween = Math.abs(azimuth2 - azimuth1);
// Формула для площади треугольника, заданного двумя сторонами и углом между ними
// (Предполагая, что мы измеряем площадь треугольника от нашего местоположения до двух точек)
double area = 0.5 * d1 * d2 * Math.sin(Math.toRadians(angleBetween));
Для объема (3 точки):
Для двух точек у нас есть основание (площадь). Третья точка обычно используется для высоты.
Пользователь указывает на основание стены (записывает расстояние).
Пользователь поднимает телефон к потолку.
Мы вычисляем разницу наклонов, чтобы найти вертикальную высоту H.
Объем = Площадь \times H.
Приложение, помимо других специфических функций, имеет дополнительные возможности, такие как отслеживание местоположения; вычисленные расстояния, площади и объемы могут измеряться в метрах, сантиметрах, дюймах и футах, и вы можете выбрать высоту, на которой будет производиться измерение камерой устройства.
Один клик для установки XAPK/APK файлов на Android!