it-swarm.com.de

Wie kann ich Sünde, Cos und Bräune bekommen, Grad anstelle von Radianten zu verwenden?

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

87
0x499602D2

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, cos und so weiter Winkel nicht zurückgeben , sie nehmen Winkel als Eingabe an. Es scheint mir, dass es für Sie nützlicher wäre, eine Funktion zu haben, die eine Eingabe des Grads in Radianten umwandelt, wie zum Beispiel:

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

die Sie verwenden könnten, um etwas wie tan(toRadians(45)) zu tun.

189
Peter Olson

Multiplizieren Sie die Eingabe mit Math.PI/180, um von Grad in Radiant zu konvertieren, bevor Sie die Systemtriggerfunktionen aufrufen.

Sie können auch Ihre eigenen Funktionen definieren:

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

und so weiter.

24

Ich habe mein eigenes kleines faules Math-Object für den Abschluss (MathD) erstellt, ich 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)));
   }
};
13
Daniel Budick

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 Radiant-Funktion verwendet werden kann:

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

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

Hoffe das hilft!

1
David Nishikawa

Wenn Sie möchten, dass alle Radiant-Werte in entsprechende Winkel im Einheitskreis (0 Grad <= Winkel <360 Grad) konvertiert werden, können Sie den Winkel im Radiant um 2 * pi modulieren und dann die Radiant-Grad-Umwandlung durchführen. Die gleiche Konvertierung kann auch in Grad in Radiant konvertiert werden, und der Code wird hier nicht angezeigt.

 let radToDeg = function(rad) {
      let pi = Math.PI;
      let smallRad = rad % (2 * pi); // reduce the radians value to be within the unit circle or from 0 to 2 * pi
      let deg = smallRad / (pi) * 180; // normal radians to degrees conversion factor
      let errorBound = 1e-6; // error tolerance
      // adjust floating point imprecisions
      if (Math.abs(deg - Math.round(deg)) <= errorBound){
        return Math.round(deg);
      } else{
        return deg;
      }
    }

Um eine höhere Genauigkeit bei der Berechnung zu erzielen, sollte der eingebaute (%) - Operator von Javascript vermieden werden. Der folgende Code ist im Wesentlichen eine Kopie des Einheitskreises. Alle Winkel werden jedoch in ihre entsprechenden Werte im Einheitskreis umgewandelt. Zum Beispiel wird 7.330382858376184 (oder pi/3 + 2 * pi) in 60 Grad umgewandelt. 74774.09394564186 (oder -2 * pi/3 + 23802 * pi) wird in 240 Grad umgewandelt.

let radToDeg = function(rad) {
  let pi = Math.PI;
  if (evenlyDivide(rad, 2 * pi)) {
    return 0;
  } else if (evenlyDivide(rad, pi)) {
    return 180;
  } else if (evenlyDivide(rad - pi / 2, 2 * pi)){
    return 90;
  } else if (evenlyDivide(rad + pi / 2, 2 * pi)){
    return 270;
  } else if (evenlyDivide(rad - pi / 4, 2 * pi)){
    return 45;
  } else if (evenlyDivide(rad + pi / 4, 2 * pi)){
    return 315;
  } else if (evenlyDivide(rad - pi / 6, 2 * pi)){
    return 30;
  } else if (evenlyDivide(rad + pi / 6, 2 * pi)){
    return 330;
  } else if (evenlyDivide(rad - pi / 3, 2 * pi)){
    return 60;
  } else if (evenlyDivide(rad + pi / 3, 2 * pi)){
    return 300;
  } else if (evenlyDivide(rad - 2 * pi / 3, 2 * pi)){
    return 120;
  } else if (evenlyDivide(rad + 2 * pi / 3, 2 * pi)){
    return 240;
  } else if (evenlyDivide(rad - 3 * pi / 4, 2 * pi)){
    return 135;
  } else if (evenlyDivide(rad + 3 * pi / 4, 2 * pi)){
    return 225;
  } else if (evenlyDivide(rad - 5 * pi / 6, 2 * pi)){
    return 150;
  } else if (evenlyDivide(rad + 5 * pi / 6, 2 * pi)){
    return 210;
  } else{
    let smallRad = rad % (2 * pi);
    return smallRad / (pi) * 180;
  }
}

Die Funktion evenlyDivide prüft lediglich, ob die beiden Eingabewerte innerhalb einer Toleranzgrenze teilbar sind (Ergebnis der Division einer ganzen Zahl):

let evenlyDivide = function(val, step) {
  let divided = val / step; // the result of division of two input values
  let errorBound = 1e-7; // error tolerance
  if (Math.abs(divided - Math.round(divided)) < errorBound) { // test if within error bound
    return true;
  }
  return false;
}
0
AlienKevin

Erstellen Sie Ihre eigene Konvertierungsfunktion, die die erforderlichen Berechnungen anwendet, und rufen Sie stattdessen diese auf. http://en.wikipedia.org/wiki/Radian#Conversion_between_radians_and_degrees

0