找到给定的x,y,z坐标的方向

时间:2016-10-17 02:16:54

标签: c++ opencv

我是opencv&的新手它正在发展中。我有x,y,z坐标(0.00949334694383068,-0.3999829847985352,0.8449078780010854),通过使用给定的坐标我怎样才能找到方向。

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_one方向和input_two方向。任何帮助表示赞赏

2 个答案:

答案 0 :(得分:0)

你要做的是被称为计算方位角。如果您对导航或地理目的感兴趣并需要彻底了解这一点,可以从这里开始:

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

否则你可以寻找一个用于计算3d坐标上方位角基础的库

答案 1 :(得分:0)

这称为矢量数学。

“坐标”是一种特殊的向量,相对于某些来源(在您的情况下为x=0,y=0,z=0)。出于这个原因,差异x1-x2, y1-y2, z1-z2是从点2 点1的向量。逆x2-x1, y2-y1, z2-z1是来自<的向量 / em>指向指向第2点。

矢量的方向通常通过忽略其长度来定义,或者通过将其长度设置为1来定义。所以我们需要先定义长度,即L = √(x*x + y*y + z*z)。我们可以定义向量x/L, y/L, z/L,它指向与x,y,z相同的方向,但长度为1。

最后,为了比较两个方向,我们可以计算这两个方向的内积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)