Come posso ottenere sin, cos e tan per usare i gradi invece dei radianti?


101

Quando lavoro con la matematica in JS, vorrei che le sue funzioni trigonometriche utilizzassero valori in gradi invece di valori in radianti. Come potrei farlo?


20
sin / cos / tan non restituiscono angoli in radianti; prendono gli angoli in radianti. Le funzioni inverse atan(), atan2(), acos(), asin()ritorno angoli.
Jason S

Risposte:


215

Puoi usare una funzione come questa per eseguire la conversione:

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

Si noti che funzioni come sin, cose così via non restituiscono angoli , ma prendono gli angoli come input. Mi sembra che ti sarebbe più utile avere una funzione che converte un input di gradi in radianti, come questa:

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

che potresti usare per fare qualcosa di simile tan(toRadians(45)).


27

Moltiplicare l'input per Math.PI/180per convertire da gradi a radianti prima di chiamare le funzioni trigonometriche di sistema.

Puoi anche definire le tue funzioni:

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

e così via.


2
Questo dovrebbe davvero essere chiamato sinDegreesper evitare confusione
BlueRaja - Danny Pflughoeft

Vero. Ho visto alcuni siti chiamare sindper mantenerlo breve. Personalmente lo tengo sinperché so che sinsarà in gradi e Math.sinin radianti, ma è nella mia testa.
Niet the Dark Absol

6
-1: sin () non restituisce un angolo. Il suo argomento di input è un angolo.
Jason S

1
Quello ... quello mi è sfuggito. Lo so. Ovviamente lo so. Non avrei realizzato un miliardo di giochi con funzioni trigonometriche se non l'avessi fatto ... ma per qualche motivo mi sono completamente dimenticato che = /
Niet the Dark Absol

Sono un noob e cattivo con trig ... posso chiederti come sarebbe l'equazione per cosDeg e tanDeg? grazie.
Kama

14

Ho creato il mio piccolo oggetto matematico pigro per la laurea (MathD), spero che aiuti:

//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

Mi piace un approccio funzionale più generale:

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

o,

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

che può essere utilizzato con qualsiasi funzione di rilevamento del radiante:

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

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

Spero che questo ti aiuti!


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.