向量夹角的计算

2020-05-07  本文已影响0人  LuckilyHaveYou

背景

在使用PaddleHub对姿态关键点分析的时候,想计算一下关节点的夹角,竟然有一些卡住了,在此记录一下。

使用内积计算夹角

刚开始想到的,就是内积公式
a \cdot b = |a||b|cos\theta
但是上面的公式有一个问题,因为\theta的定义域在[0,\pi]之间,所以计算的角度就有些问题。
当顺时针角度大于\pi的时候,就会有问题。

使用外积来判断是否超过了\pi

外积的模长是|a\times b|=|a||b|sin\theta
方向由a指向b的右手规则给出
使用公式有
\begin{pmatrix}i&j&k\\ x_a&y_a&z_a\\ x_b&y_b&z_b \end{pmatrix}
假设平面的z坐标为0,可以得到上式的i与j的系数都是0,而k的系数=x_a y_b-x_b y_a
考虑在右手坐标系当中,如果两都的夹角<180度,则外积大于0,如果超过了180,外积小于0.这样结合cos计算出来的值,就可以确定顺时针多少度。

计算公式

\theta=arccos(\frac {a\cdot b}{|a||b|})
计算x_a y_b-x_b y_a
如果上值大于0,则返回\theta,如果值小于0,则返回2\pi - \theta

去github

上一篇 下一篇

猜你喜欢

热点阅读