Quando estou trabalhando com matemática em JS, gostaria que suas funções trigonométricas usassem valores de graus em vez de valores de radianos. Como eu faria isso?
Quando estou trabalhando com matemática em JS, gostaria que suas funções trigonométricas usassem valores de graus em vez de valores de radianos. Como eu faria isso?
Respostas:
Você pode usar uma função como esta para fazer a conversão:
function toDegrees (angle) {
return angle * (180 / Math.PI);
}
Observe que funções como sin
, cos
e assim por diante não retornam ângulos , elas tomam ângulos como entrada. Parece-me que seria mais útil para você ter uma função que converte uma entrada de grau em radianos, como este:
function toRadians (angle) {
return angle * (Math.PI / 180);
}
que você pode usar para fazer algo parecido tan(toRadians(45))
.
Multiplique a entrada por Math.PI/180
para converter de graus em radianos antes de chamar as funções trigonométricas do sistema.
Você também pode definir suas próprias funções:
function sinDegrees(angleDegrees) {
return Math.sin(angleDegrees*Math.PI/180);
};
e assim por diante.
sinDegrees
para evitar confusão
sind
para ser breve. Pessoalmente, mantenho-o assim sin
porque sei que sin
então será em graus e Math.sin
em radianos, mas isso é por minha conta.
Eu criei meu próprio objeto de matemática preguiçoso para o grau (MathD), espero que ajude:
//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)));
}
};
Gosto de uma abordagem funcional mais geral:
/**
* 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);
}
que pode ser usado com qualquer função de tomada de radiano:
dTrig(Math.sin, 90);
// -> 1
dTrig(Math.tan, 180);
// -> 0
Espero que isto ajude!
Crie sua própria função de conversão que aplique a matemática necessária e invoque-a. http://en.wikipedia.org/wiki/Radian#Conversion_between_radians_and_degrees
atan()
,atan2()
,acos()
,asin()
retorno ângulos.