如何有效地计算向量的余切

How to efficiently calculate cotangents from vectors

本文关键字:余切 向量 计算 有效地      更新时间:2023-10-16

我正试图通过标准公式实现一个计算向量余切(数学余切(的函数:

cot(ab(=(a*b

一位同事告诉我,计算1/|a x b|并不是最好的方法。我想到的另一种选择是首先计算角度,然后使用余弦函数计算弧度角。

这里的选择方法是什么?(除了上面提到的,还有其他的吗(

您可能想要取两个向量之间的角度的余切

你确实可以先用计算角度

Angle= atan(cross / dot) 

或更好的

Angle= atan2(cross, dot)

这个角度也可以作为两个矢量的方向的差来获得

Angle= atan2(by, bx) - atan2(ay, ax)

然后取余切

1. / tan(Angle)

或互补角的切线

tan(atan2(dot, cross))

无论如何,认为这涉及到对两个或三个超越函数的评估,这是昂贵的,也不太准确。

从上面的第三个方程中,可以导出

cotan(Angle)= (1 + by/bx.ay/ax) / (by/bx - ay/ax)

这只是对初始公式的改写,但成本更高(3个除法(,而且可能会在更多角度下失败。

所以

(ax bx + ay by) / (ax by - ay bx)

肯定是更快、更安全的方法。

除非有特殊情况,比如精度低就足够了,同时计算其他表达式或向量上的条件,否则我看不到更好的方法。