Нам нужны углы между миром и устройством.Поскольку гравитационный вектор направлен вниз, это просто (при условии, что вы указываете с помощью оси Y устройства):
cos angle = -a.y / sqrt(a.x^2 + a.y^2 + a.z^2)
Два угла, которые мы получаем из ваших показаний:
angle1 = 4.19065°
angle2 = 4.18205°
Вы уже можете видеть, что углы очень близки, так как два значения ускорения также очень близки.Кстати, мне интересно, если вы действительно указываете с осью Y, потому что значения силы тяжести предполагают, что вы держите телефон почти вертикально в обоих случаях.
В любом случае, если мы предположим, что эти два угла правильны, мыТеперь можно рассчитать высоту соответствующих треугольников, предполагая длину до цели l
.Тогда:
tan (90° - angle) = h / l
Если предположить l=20 m
, это дает нам два значения высоты:
h1 = 272.958 m
h2 = 273.521 m
Это высоты над высотой телефона.Теоретически, один должен быть положительным, а другой - отрицательным.Высота дерева будет равна разнице двух высот:
treeH = h2 - h1
treeH = 0.56338 m
Как вы видели на протяжении всего примера, ваши показания должны быть довольно неточными.Тем не менее, так вы бы рассчитали высоту дерева.