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
, cos
et 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/180
pour 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.
sinDegrees
pour éviter toute confusion
sind
pour rester bref. Personnellement, je le garde sin
parce que je sais que ce sin
sera alors en degrés et Math.sin
en 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.