2016-10-17 3 views
0

Я новичок в opencv & Он развивается. У меня есть координаты x, y, z (0.00949334694383068, -0.3999829847985352, 0.8449078780010854) с использованием заданных координат, как я мог найти направление.Найти направление заданных x, y, z cordinates

for an example 
input one : x,y,z = 0.00949334694383068, -0.3999829847985352, 0.8449078780010854 
input two : x,y,z = 0.01603883281370779, 0.6066595296580494, 0.5342810849038371 

В конце концов я хочу сравнить направление ввода и направление input_two. Любая помощь с благодарностью

ответ

0

Это называется векторной математикой.

«Координаты» - это особый вид вектора, относительно некоторого происхождения (в вашем случае x=0,y=0,z=0). По этой причине, разница x1-x2, y1-y2, z1-z2 является вектором от точки 2 до точки 1. Обратного x2-x1, y2-y1, z2-z1 является вектором от точки 1 до точки 2.

направления вектора является обычно определяется игнорированием его длины или, альтернативно, путем установки его длины в единицу. Поэтому нам нужно сначала определить длину, которая равна L = √(x*x + y*y + z*z). Мы можем определить вектор x/L, y/L, z/L, который указывает в том же направлении, что и x,y,z, но с длиной один.

Наконец, чтобы сравнить два направления, мы можем рассчитать внутренний продукт этих двух направлений: x1/L1 * x2/L2 + y1/L1 * y2/L2 + z1/L1 * z2/L2. Если это одно, они указывают в одном направлении. Если это 0, они ортогональны. Если это -1, они указывают в противоположных направлениях.

Как вы можете видеть, вектор 0,0,0 имеет длину 0 и не имеет направления. Это может усложнить ситуацию.

В OpenCV: class Vec. Функция длины называется norm(v), а внутренний продукт называется v1.mul(v2)

+0

MSalters это моя другая идея, если я беру x & y и вычисляю значение sin. Думаю, я могу взять направление. Но для этого у меня нет хорошей идеи для уровня реализации. если бы вы могли объяснить это, это тоже будет очень полезно. – Alan

+0

это моя другая идея, если я беру x & y и вычисляю значение sin. Думаю, я могу взять направление. Но для этого у меня нет хорошей идеи для уровня реализации. если вы могли бы это объяснить, это тоже будет полезно – Alan

+0

@RahulaCol: Нет, 'sin (x/y)' не даст значимого результата. Вы можете использовать 'atan2 (y, x)'. – MSalters

0

То, что вы пытаетесь сделать, называется вычислением азимута. Если вы заинтересованы в этом навигационных или географических целях и необходимости глубокого понимания этого, вы можете начать здесь:

http://mobile.codeguru.com/cpp/cpp/algorithms/article.php/c5115/Geographic-Distance-and-Azimuth-Calculations.htm

В противном случае вы можете искать библиотеку для расчета азимута базы на 3d со -определения

Смежные вопросы