如何使用度数而不是弧度来获得sin,cos和tan?

时间:2012-03-14 15:41:16

标签: javascript math

当我在JS中使用数学时,我希望它的trig函数使用度数值而不是弧度值。我该怎么做?

6 个答案:

答案 0 :(得分:191)

您可以使用此类函数进行转换:

function toDegrees (angle) {
  return angle * (180 / Math.PI);
}

请注意,sincos等功能不返回角度,它们将角度视为输入。在我看来,拥有一个将度数输入转换为弧度的函数会更有用,如下所示:

function toRadians (angle) {
  return angle * (Math.PI / 180);
}

您可以使用它来执行tan(toRadians(45))

之类的操作

答案 1 :(得分:24)

在调用系统触发函数之前,将输入乘以Math.PI/180以将度数转换为弧度。

您还可以定义自己的功能:

function sinDegrees(angleDegrees) {
    return Math.sin(angleDegrees*Math.PI/180);
};

等等。

答案 2 :(得分:13)

我为学位(MathD)创建了自己的小懒惰数学对象,希望它有所帮助:

//helper
/**
 * converts degree to radians
 * @param degree
 * @returns {number}
 */
var toRadians = function (degree) {
    return degree * (Math.PI / 180);
};

/**
 * Converts radian to degree
 * @param radians
 * @returns {number}
 */
var toDegree = function (radians) {
    return radians * (180 / Math.PI);
}

/**
 * Rounds a number mathematical correct to the number of decimals
 * @param number
 * @param decimals (optional, default: 5)
 * @returns {number}
 */
var roundNumber = function(number, decimals) {
    decimals = decimals || 5;
    return Math.round(number * Math.pow(10, decimals)) / Math.pow(10, decimals);
}
//the object
var MathD = {
    sin: function(number){
        return roundNumber(Math.sin(toRadians(number)));
    },
    cos: function(number){
        return roundNumber(Math.cos(toRadians(number)));
    },
    tan: function(number){
        return roundNumber(Math.tan(toRadians(number)));
    },
    asin: function(number){
        return roundNumber(toDegree(Math.asin(number)));
    },
    acos: function(number){
       return roundNumber(toDegree(Math.acos(number)));
   },
   atan: function(number){
       return roundNumber(toDegree(Math.atan(number)));
   }
};

答案 3 :(得分:1)

我喜欢更通用的功能方法:

/**
* converts a trig function taking radians to degrees
* @param {function} trigFunc - eg. Math.cos, Math.sin, etc.
* @param {number} angle - in degrees
* @returns {number}
*/
const dTrig = (trigFunc, angle) => trigFunc(angle * Math.PI / 180);

,或者

function dTrig(trigFunc, angle) {
  return trigFunc(angle * Math.PI / 180);
}

可以与任何弧度函数一起使用:

dTrig(Math.sin, 90);
  // -> 1

dTrig(Math.tan, 180);
  // -> 0

希望这有帮助!

答案 4 :(得分:0)

创建自己的转换函数,应用所需的数学运算,然后调用它们。 http://en.wikipedia.org/wiki/Radian#Conversion_between_radians_and_degrees

答案 5 :(得分:0)

如果要将所有弧度值转换为单位圆中的相应角度(0度<=角度<360度),则可以先将弧度的角度乘以2 * pi,然后将弧度进行度数转换转换。相同的转换也可以实现以度为单位的弧度转换,此处未显示代码。

let radToDeg = function(rad) {
  let pi = Math.PI;
  if (evenlyDivide(rad, 2 * pi)) {
    return 0;
  } else if (evenlyDivide(rad, pi)) {
    return 180;
  } else if (evenlyDivide(rad - pi / 2, 2 * pi)){
    return 90;
  } else if (evenlyDivide(rad + pi / 2, 2 * pi)){
    return 270;
  } else if (evenlyDivide(rad - pi / 4, 2 * pi)){
    return 45;
  } else if (evenlyDivide(rad + pi / 4, 2 * pi)){
    return 315;
  } else if (evenlyDivide(rad - pi / 6, 2 * pi)){
    return 30;
  } else if (evenlyDivide(rad + pi / 6, 2 * pi)){
    return 330;
  } else if (evenlyDivide(rad - pi / 3, 2 * pi)){
    return 60;
  } else if (evenlyDivide(rad + pi / 3, 2 * pi)){
    return 300;
  } else if (evenlyDivide(rad - 2 * pi / 3, 2 * pi)){
    return 120;
  } else if (evenlyDivide(rad + 2 * pi / 3, 2 * pi)){
    return 240;
  } else if (evenlyDivide(rad - 3 * pi / 4, 2 * pi)){
    return 135;
  } else if (evenlyDivide(rad + 3 * pi / 4, 2 * pi)){
    return 225;
  } else if (evenlyDivide(rad - 5 * pi / 6, 2 * pi)){
    return 150;
  } else if (evenlyDivide(rad + 5 * pi / 6, 2 * pi)){
    return 210;
  } else{
    let smallRad = rad % (2 * pi);
    return smallRad / (pi) * 180;
  }
}

要获得更高的计算精度,应避免使用Javascript的内置模块化(%)运算符。以下代码基本上是单位圆的副本。但是,所有角度都将转换为单位圆中的相应值。例如,将7.330382858376184(或pi / 3 + 2 * pi)转换为60度; 74774.09394564186(或-2 * pi / 3 + 23802 * pi)被转换为240度。

evenlyDivide

let evenlyDivide = function(val, step) { let divided = val / step; // the result of division of two input values let errorBound = 1e-7; // error tolerance if (Math.abs(divided - Math.round(divided)) < errorBound) { // test if within error bound return true; } return false; } 函数只是简单地检查两个输入值在一定公差范围内是否可除(整数除法的结果):

path