我可以在不计算角度的情况下找到余弦值的正弦值吗?

时间:2012-10-15 21:02:24

标签: math game-engine trigonometry game-physics

叉积的大小描述了用于构建交叉积的两个向量(u,v)描述的平行四边形的有符号区域,它有其用途。这个相同的幅度可以计算为u和v之间角度的正弦的v倍的u倍的大小:   ||ü|||| v ||罪(THETA)。

现在u(标准化)和v(标准化)的点积给出了u和v之间角度的余弦:   cos(theta)== dot(normalize(u),normalize(v))

我希望能够获得与余弦值相关的带符号正弦值。它是相关的,因为正弦和余弦波是PI / 2不同步。我知道1的平方根减去余弦值的平方值给出了无符号正弦值:   sin(theta)== sqrt(1 - (cos(theta)* cos(theta)) 其中cos(theta)是指点积而不是角度。

但是伴随标志计算(+/-)要求θ为角度:   (cos(theta + PI / 2))>或==或< 0 如果我必须执行acos功能,我不妨只做十字产品并找到幅度。

是否有已知的比率或步骤可以添加到余弦值以获得其相关的正弦值?

3 个答案:

答案 0 :(得分:1)

对于每个可能的余弦,如果相应的角度不受限制,则两个符号都可以正弦。

如果你知道角度在[0,pi]之间,那么正弦必须为正或零。

如果您想知道平行四边形的区域,请始终选择正分支sin(x) = sqrt(1 - cos(x)^2)。负区域很少有意义(仅用于定义w.r.t.到平面的方向,例如背面剔除)

如果您有两个向量,请直接使用叉积或点积,而不是另一个并转换。

答案 1 :(得分:0)

对我而言,似乎是一种获取atan2身份的复杂方式:

d =   · = ||||cosθ
c = |×| = ||||sinθ   (with 0° < θ < 180°)

 tanθ = · / |×|
    θ = atan2(c·sgn(c|z), d)   (= four quadrant)

其中sgn(c|z)是c中z分量的符号(除非两者都与xz或yz平面完全平行,然后分别是y分量和x分量的符号)。

现在,从基本的三角形身份,

r = √(x²+y²)

cos(atan2(y,x)) = x/r
sin(atan2(y,x)) = y/r

因此,

sinθ = c·sgn(c|z)/√(c²+d²)
cosθ = d/√(c²+d²)

答案 2 :(得分:-2)

我想我找到了解决方案。 v perp

cos(b) == sin(a)

v_parallel = dot(normalize(u), v) // the projection of v on u

v_perp = normalize(v) - v_parallel

cos(b) = dot(normalize(v), v_perp) // v_perp is already normalized

因此,

的大小
u cross v = magnitude(u) * magnitude(v) * cos(b)