134

When I'm working with math in JS I would like its trig functions to use degree values instead of radian values. How would I do that?

Jason C
  • 38,729
  • 14
  • 126
  • 182
David G
  • 94,763
  • 41
  • 167
  • 253
  • 25
    sin/cos/tan don't return angles in radians; they take angles in radians. The inverse functions `atan()`, `atan2()`, `acos()`, `asin()` return angles. – Jason S Mar 14 '12 at 16:23

6 Answers6

265

You can use a function like this to do the conversion:

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

Note that functions like sin, cos, and so on do not return angles, they take angles as input. It seems to me that it would be more useful to you to have a function that converts a degree input to radians, like this:

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

which you could use to do something like tan(toRadians(45)).

Peter Olson
  • 139,199
  • 49
  • 202
  • 242
38

Multiply the input by Math.PI/180 to convert from degrees to radians before calling the system trig functions.

You could also define your own functions:

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

and so on.

Orion Lawlor
  • 378
  • 2
  • 8
Niet the Dark Absol
  • 320,036
  • 81
  • 464
  • 592
14

I created my own little lazy Math-Object for degree (MathD), hope it helps:

//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)));
   }
};
Sergio
  • 28,539
  • 11
  • 85
  • 132
Daniel Budick
  • 1,780
  • 1
  • 18
  • 19
6

I like a more general functional approach:

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

or,

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

which can be used with any radian-taking function:

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

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

Hope this helps!

  • That's not especially functional or general. What if it takes two arguments? What if it returns something in radians (`Math.asin()` for example) and you want to get degrees as output? The accepted answer is using just the right amount of functional programming. An unnecessary use of a function as an argument doesn't make it a functional programming approach. – Benjamin Atkin Aug 17 '21 at 19:41
2

There's a project with more than a thousand stars on GitHub that provides functions for converting from degrees to radians and radians to degrees.

To install:

npm i @stdlib/math

To import:

const rad2deg = require('@stdlib/math/base/special/rad2deg')
const deg2rad require('@stdlib/math/base/special/deg2rad')

To use:

console.log(Math.sin(deg2rad(90)))
console.log(rad2deg(Math.asin(1)))
Benjamin Atkin
  • 14,071
  • 7
  • 61
  • 60
0

Create your own conversion function that applies the needed math, and invoke those instead. http://en.wikipedia.org/wiki/Radian#Conversion_between_radians_and_degrees

MLProgrammer-CiM
  • 17,231
  • 5
  • 42
  • 75
  • 7
    Whilst this may theoretically answer the question, [it would be preferable](http://meta.stackexchange.com/q/8259) to include the essential parts of the answer here, and provide the link for reference. – Jason C Mar 22 '14 at 01:38