如何使用Math.cos()& Math.sin()正确吗?

时间:2014-02-13 22:16:26

标签: actionscript-3 math numbers trigonometry

我写了一些跟踪代码来描述我的问题。

GLOBALS.customTrace = "COS 0: " + String(Math.cos(0 * Math.PI / -180)) + "   //OK\n";
GLOBALS.customTrace += "SIN 0: " + String(Math.sin(0 * Math.PI / -180)) + "   //OK\n";
GLOBALS.customTrace += "COS 90: " + String(Math.cos(90 * Math.PI / -180)) + "   //WHY ?\n";
GLOBALS.customTrace += "SIN 90: " + String(Math.sin(90 * Math.PI / -180)) + "   //OK\n";
GLOBALS.customTrace += "COS 180: " + String(Math.cos(180 * Math.PI / -180)) + "   //OK\n";
GLOBALS.customTrace += "SIN 180: " + String(Math.sin(180 * Math.PI / -180)) + "   //WHY ?\n";
GLOBALS.customTrace += "COS 270: " + String(Math.cos(270 * Math.PI / -180)) + "   //WHY ?\n";
GLOBALS.customTrace += "SIN 270: " + String(Math.sin(270 * Math.PI / -180)) + "   //OK\n";

上面的代码......

...返回此输出。

OUTPUT

我不知道怎么处理这个?我不需要实际值用于整个角度,但我需要cos90,sin180,cos270的实际值

此外,还有另一个问题,但我觉得这是上述真正问题的结果。 我在这段代码中都使用-180和+180,但它们都返回负值。

GLOBALS.customTrace = "COS 270 with Math.PI / -180\n" + String(Math.cos(270 * Math.PI / -180)) + "   //IF THIS NEGATIVE...\n\n";
GLOBALS.customTrace += "COS 270: with Math.PI / +180\n" + String(Math.cos(270 * Math.PI / 180)) + "   //...WHY THIS NEGATIVE TOO ?\n";

上面的代码......

...返回此输出

OUTPUT2

1 个答案:

答案 0 :(得分:2)

原因是Math.PI != π

您可以尝试使用toFixed(15)来获得准确的值。

trace(String(Math.cos(90 * Math.PI / -180).toFixed(15)));
trace(String(Math.sin(180 * Math.PI / -180).toFixed(15)));
trace(String(Math.cos(270 * Math.PI / -180).toFixed(15)));
trace(String(Math.cos(90 * Math.PI / -180).toFixed(15)) == 0);
trace(String(Math.sin(180 * Math.PI / -180).toFixed(15)) == 0);
trace(String(Math.cos(270 * Math.PI / -180).toFixed(15)) == 0);

输出

0.000000000000000
-0.000000000000000
-0.000000000000000
true
true
true