使用余弦规则很难找到两个向量之间的夹角。但是,由于我正在为资源非常有限的平台进行编程,因此我想避免诸如sqrt和的计算arccos。即使是简单的划分也应尽可能地受到限制。
sqrt
arccos
幸运的是,我本身不需要角度,只需要一些与所述角度成比例的值即可。
所以我正在寻找一种计算上便宜的算法来计算与两个向量之间的角度有关的数量。到目前为止,我还没有找到符合要求的内容,我也无法自己提出一些建议。
您是否尝试过CORDIC算法?这是解决极性↔矩形问题的通用框架,仅需通过加/减/位移位+表格来完成,基本上以tan -1(2- n)形式的角度进行旋转。您可以通过更改迭代次数来权衡准确性与执行时间。
在您的情况下,将一个矢量作为固定参考,然后将另一个矢量复制到一个临时矢量,您可以使用该角度将其旋转到第一个矢量(大致平分),直到达到所需的角度精度为止。
( 编辑: 使用点积符号确定每一步是向前还是向后旋转。尽管如果乘数便宜到足以允许使用点积,那么不要理会CORDIC,也许使用sin / cos对表旋转角度为π/ 2 n的矩阵,以解决二等分问题。)
( 编辑: 我喜欢Eric Bainville在评论中的建议:将两个向量都朝零方向旋转并跟踪角度差。)