Wie kann ich Sünde, Cos und Bräune dazu bringen, Grad anstelle von Bogenmaß zu verwenden?

100

Wenn ich in JS mit Mathematik arbeite, möchte ich, dass die Triggerfunktionen Gradwerte anstelle von Bogenmaßwerten verwenden. Wie würde ich das machen?

0x499602D2
quelle
19
sin / cos / tan geben keine Winkel im Bogenmaß zurück; Sie nehmen Winkel im Bogenmaß ein. Die Umkehrfunktionen atan(), atan2(), acos(), asin()Rücklaufwinkel.
Jason S

Antworten:

213

Sie können eine Funktion wie diese verwenden, um die Konvertierung durchzuführen:

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

Beachten Sie, dass Funktionen wie sin, cosusw. keine Winkel zurückgeben , sondern Winkel als Eingabe verwenden. Es scheint mir, dass es für Sie nützlicher wäre, eine Funktion zu haben, die eine Grad-Eingabe in Bogenmaß umwandelt, wie folgt:

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

mit denen man so etwas machen könnte tan(toRadians(45)).

Peter Olson
quelle
27

Multiplizieren Sie die Eingabe mit Math.PI/180 , um sie von Grad in Bogenmaß umzuwandeln, bevor Sie die Systemtrig-Funktionen aufrufen.

Sie können auch Ihre eigenen Funktionen definieren:

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

und so weiter.

Niet the Dark Absol
quelle
2
Dies sollte wirklich benannt werden sinDegrees, um Verwirrung zu vermeiden
BlueRaja - Danny Pflughoeft
Wahr. Ich habe gesehen, dass einige Websites anrufen sind, um es kurz zu halten. Ich persönlich behalte es bei, sinweil ich weiß, dass sindas dann in Grad und Math.sinim Bogenmaß sein wird, aber das liegt auf meinem eigenen Kopf.
Niet the Dark Absol
6
-1: sin () gibt keinen Winkel zurück. Das Eingabeargument ist ein Winkel.
Jason S
1
Das ... das ist mir entkommen. Ich weiß das. Natürlich weiß ich das. Ich hätte nicht eine Unmenge Spiele mit Triggerfunktionen gemacht, wenn ich nicht ... aber aus irgendeinem Grund habe ich das völlig vergessen = /
Niet the Dark Absol
Ich bin ein Noob und schlecht mit Trig ... darf ich fragen, wie die Gleichung für cosDeg und tanDeg aussehen würde? Danke.
Kama
14

Ich habe mein eigenes kleines faules Math-Objekt für den Abschluss (MathD) erstellt, hoffe es hilft:

//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)));
   }
};
Daniel Budick
quelle
4

Ich mag einen allgemeineren funktionalen Ansatz:

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

oder,

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

die mit jeder Radian-Funktion verwendet werden kann:

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

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

Hoffe das hilft!

David Nishikawa
quelle