Bagaimana cara membuat sin, cos, dan tan menggunakan derajat sebagai ganti radian?

101

Ketika saya bekerja dengan matematika di JS, saya ingin fungsi trigonometri menggunakan nilai derajat daripada nilai radian. Bagaimana saya melakukannya?

0x499602D2
sumber
20
sin / cos / tan tidak mengembalikan sudut dalam radian; mereka mengambil sudut dalam radian. Fungsi invers atan(), atan2(), acos(), asin()kembali sudut.
Jason S

Jawaban:

215

Anda dapat menggunakan fungsi seperti ini untuk melakukan konversi:

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

Perhatikan bahwa fungsi seperti sin,, cosdan seterusnya tidak mengembalikan sudut , mereka mengambil sudut sebagai masukan. Menurut saya, akan lebih berguna bagi Anda untuk memiliki fungsi yang mengubah input derajat menjadi radian, seperti ini:

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

yang dapat Anda gunakan untuk melakukan sesuatu seperti tan(toRadians(45)).

Peter Olson
sumber
27

Kalikan masukan dengan Math.PI/180untuk mengonversi dari derajat ke radian sebelum memanggil fungsi trigonometri sistem.

Anda juga dapat menentukan fungsi Anda sendiri:

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

dan seterusnya.

Niet the Dark Absol
sumber
2
Ini benar-benar harus dinamai sinDegreesuntuk menghindari kebingungan
BlueRaja - Danny Pflughoeft
Benar. Saya telah melihat beberapa situs yang meminta sindagar tetap singkat. Saya pribadi menyimpannya sinkarena saya tahu itu sinakan menjadi derajat dan Math.sinradian, tapi itu di kepala saya sendiri.
Niet the Dark Absol
6
-1: sin () tidak mengembalikan sudut. Argumen masukannya adalah sudut.
Jason S
1
Itu ... yang itu lolos dariku. Saya tahu itu. Tentu saja saya tahu itu. Saya tidak akan membuat banyak sekali game dengan fungsi trigonometri jika saya tidak melakukannya ... tetapi untuk beberapa alasan saya agak lupa bahwa = /
Niet the Dark Absol
Saya seorang noob dan buruk dengan trig ... bolehkah saya bertanya bagaimana persamaan untuk cosDeg dan tanDeg akan terlihat? Terima kasih.
Kama
14

Saya membuat Objek Matematika saya sendiri yang malas untuk gelar (MathD), semoga ini membantu:

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

Saya menyukai pendekatan fungsional yang lebih umum:

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

atau,

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

yang dapat digunakan dengan fungsi pengambilan radian:

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

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

Semoga ini membantu!

David Nishikawa
sumber