Como posso fazer com que sin, cos e tan usem graus em vez de radianos?


101

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?


20
sin / cos / tan não retorna ângulos em radianos; eles tomam ângulos em radianos. As funções inversas atan(), atan2(), acos(), asin()retorno ângulos.
Jason S

Respostas:


215

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, cose 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)).


27

Multiplique a entrada por Math.PI/180para 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.


2
Deve ter um nome sinDegreespara evitar confusão
BlueRaja - Danny Pflughoeft

Verdade. Já vi alguns sites chamarem sindpara ser breve. Pessoalmente, mantenho-o assim sinporque sei que sinentão será em graus e Math.sinem radianos, mas isso é por minha conta.
Niet the Dark Absol

6
-1: sin () não retorna um ângulo. Seu argumento de entrada é um ângulo.
Jason S

1
Aquele ... aquele fugiu de mim. Eu sei disso. Claro que sei disso. Eu não teria feito um bazilhão de jogos com funções trigonométricas se não ... mas por alguma razão eu meio que esqueci completamente que = /
Niet the Dark Absol

Eu sou um novato e ruim com trig ... posso perguntar como seria a equação para cosDeg e tanDeg? obrigado.
Kama

14

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)));
   }
};

4

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!


Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.