我试图通过标准公式实现一个函数来计算向量的数量(数学的):
cot( a , b )=( a * b )/ | a < / strong> x b |,其中 a 和 b 是向量
一位同事告诉我,计算1/|a x b|
不是计算机计算的最佳选择。我想到的另一种选择是首先计算角度,然后使用cotan函数计算弧度角。
这里选择的方法是什么? (除了上面提到的那个之外,还有另外一个)
答案 0 :(得分:3)
你可能想要在两个向量之间采用角度的余切。
您确实可以先用
计算角度set @Total = (@Total * power(1 + (@Value1 / 100.0), @OriginalValue) + (@Per_Month / 100.0) * ( CASE WHEN @OriginalValue = 0 THEN 1
ELSE
CASE
WHEN (@Value1 / 100.0)<> 0
THEN (power(1 + (@Value1 / 100.0), @OriginalValue) - 1) / (@Value1 / 100.0) * (1 + (@Value1 / 100.0) * @Method)
ELSE @OriginalValue
END
END))
或更好
Angle= atan(cross / dot)
该角度也可以作为两个矢量的方向的差异来获得
Angle= atan2(cross, dot)
然后拿出余切
Angle= atan2(by, bx) - atan2(ay, ax)
或互补角的切线
1. / tan(Angle)
无论如何,认为这涉及对两个或三个超越函数的评估,这些函数代价高昂且准确性较低。
从上面的第三个等式中,你可以推导出
tan(atan2(dot, cross))
这只是对初始公式的重写,但成本更高(3格),并且可能会因更多角度而失败。
所以
cotan(Angle)= (1 + by/bx.ay/ax) / (by/bx - ay/ax)
绝对是更快更安全的方法。
除非有一些特殊情况,例如低精度就足够了,其他表达式在矢量上同时或条件下计算,我看不到更好的方法。