我认为您正在计算反函数错误地以一种让我感到奇怪的方式。您应该使用asin
逆sin 和acos
逆cos。您正在计算乘法逆,而不是功能逆。虽然在这里,它似乎是同一件事。
使用该atan2()
功能。它将从 y 和 x 值产生角度。它隐含地计算逆 sin 和逆 cos,并检查 y 和 x 的符号以发现正确的象限。
ATAN2(3)
姓名
1.8 `atan2', `atan2f'--y/x 的反正切
概要
#包括
双atan2(双Y,双X);
浮动 atan2f(浮动 Y,浮动 X);
描述
`atan2' 计算 Y/X 的反正切(反正切)。`atan2'
即使对于 pi/2 或 -pi/2 附近的角度(即
即,当 X 接近 0 时)。
`atan2f' 与 `atan2' 相同,只是它接受并返回 `float'。
回报
`atan2' 和 `atan2f' 返回一个弧度值,范围为 -pi 到 pi。
我假设我们忽略了 2.07814 这显然不是旋转的一部分。atan2(0.587785, -0.809017)
给我144.0度。atan(-0.587785, -0.809017)
给出 216.0。
啊哈!您的矩阵与我习惯的矩阵“横向”。我认为 2.07814 部分只是翻译。使用这个 3d 旋转矩阵作为指导,
1 0 0
0 cos sin
0 -sin cos
......让我和以前一样困惑。我不断得到144.0。
一个告白。
我忽略了上面的弧度/度数问题,因为我使用 Postscript 而不是 C。
$ gsnd -q
GS>0.587785 -0.809017 atan =
144.0
GS>-0.587785 -0.809017 atan =
216.0
GS>