我是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方向。任何帮助表示赞赏
答案 0 :(得分:0)
你要做的是被称为计算方位角。如果您对导航或地理目的感兴趣并需要彻底了解这一点,可以从这里开始:
否则你可以寻找一个用于计算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)