Comment puis-je faire en sorte que sin, cos et tan utilisent des degrés au lieu de radians?

101

Lorsque je travaille avec les mathématiques dans JS, je voudrais que ses fonctions trigonométriques utilisent des valeurs en degrés au lieu de valeurs en radian. Comment pourrais-je faire ça?

0x499602D2
la source
20
sin / cos / tan ne renvoie pas les angles en radians; ils prennent des angles en radians. Les fonctions inverses atan(), atan2(), acos(), asin()retour angles.
Jason S

Réponses:

215

Vous pouvez utiliser une fonction comme celle-ci pour effectuer la conversion:

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

Notez que des fonctions comme sin, coset ainsi de suite ne renvoient pas les angles , ils prennent des angles en entrée. Il me semble qu'il vous serait plus utile d'avoir une fonction qui convertit une entrée de degré en radians, comme ceci:

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

que vous pouvez utiliser pour faire quelque chose comme tan(toRadians(45)).

Peter Olson
la source
27

Multipliez l'entrée par Math.PI/180pour convertir des degrés en radians avant d'appeler les fonctions trigonométriques du système.

Vous pouvez également définir vos propres fonctions:

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

etc.

Niet the Dark Absol
la source
2
Cela devrait vraiment être nommé sinDegreespour éviter toute confusion
BlueRaja - Danny Pflughoeft
Vrai. J'ai vu certains sites appeler sindpour rester bref. Personnellement, je le garde sinparce que je sais que ce sinsera alors en degrés et Math.sinen radians, mais c'est sur ma propre tête.
Niet the Dark Absol
6
-1: sin () ne renvoie pas d'angle. Son argument d'entrée est un angle.
Jason S
1
Ce ... celui-là m'a échappé. Je le sais. Bien sûr, je le sais. Je n'aurais pas fait un bazillion de jeux avec des fonctions trigonométriques si je ne l'avais pas fait ... mais pour une raison quelconque, j'ai un peu oublié ça = /
Niet the Dark Absol
Je suis un noob et mauvais avec trig ... puis-je demander à quoi ressemblerait l'équation pour cosDeg et tanDeg? Merci.
Kama le
14

J'ai créé mon propre petit objet mathématique paresseux pour le diplôme (MathD), j'espère que cela aidera:

//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)));
   }
};
Daniel Budick
la source
4

J'aime une approche fonctionnelle plus générale:

/**
* 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);

ou,

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

qui peut être utilisé avec n'importe quelle fonction de prise de radian:

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

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

J'espère que cela t'aides!

David Nishikawa
la source