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?
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?
Réponses:
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)).
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.
sinDegreespour éviter toute confusion
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.
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)));
}
};
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!
Créez votre propre fonction de conversion qui applique les mathématiques nécessaires et appelez-les à la place. http://en.wikipedia.org/wiki/Radian#Conversion_between_radians_and_degrees
atan(),atan2(),acos(),asin()retour angles.