Radyan yerine dereceleri kullanmak için sin, cos ve tan'ı nasıl elde edebilirim?


103

JS'de matematikle çalışırken, trigonometri fonksiyonlarının radyan değerleri yerine derece değerleri kullanmasını istiyorum. Bunu nasıl yaparım?


20
sin / cos / tan açıları radyan cinsinden döndürmez; radyan cinsinden açı alırlar. Ters fonksiyonlar atan(), atan2(), acos(), asin()dönüş açıları.
Jason S.

Yanıtlar:


217

Dönüşümü yapmak için bunun gibi bir işlevi kullanabilirsiniz:

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

Fonksiyonları gibi Not olduğunu sin, cosve benzeri açıları dönmüyor onlar girdi olarak açılar almak. Bana öyle geliyor ki, bir derece girdisini radyana çeviren bir işleve sahip olmak sizin için daha faydalı olacaktır, örneğin:

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

gibi bir şey yapmak için kullanabilirsiniz tan(toRadians(45)).


27

Girdiyi şu şekilde çarpın: Math.PI/180Sistem tetikleme işlevlerini çağırmadan önce dereceden radyana dönüştürmek için ile .

Ayrıca kendi işlevlerinizi de tanımlayabilirsiniz:

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

ve bunun gibi.


2
Bu gerçekten adlı olmalıdır sinDegreeskarışıklığı önlemek için
BlueRaja - Dany Pflughoeft

Doğru. Bazı sitelerin aradığını sindkısa tutmak için gördüm . Ben şahsen tutuyorum sinçünkü bunun sinderece ve Math.sinradyan cinsinden olacağını biliyorum , ama bu kendi kafamda.
Niet the Dark Absol

6
-1: sin () bir açı döndürmez. Girdi argümanı bir açıdır.
Jason S

1
Bu ... o benden kaçtı. Bunu biliyorum. Tabii ki biliyorum. Yapmasaydım trigonometri işlevli bazilyon oyun yapmazdım ... ama bir nedenden dolayı bunu tamamen unutmuşum = /
Niet the Dark Absol

Ben bir çaylağım ve trigonometri konusunda kötüyüm ... cosDeg ve tanDeg denkleminin nasıl görüneceğini sorabilir miyim? teşekkür ederim.
Kama

14

Derece için kendi küçük tembel Matematik Nesnemi (MathD) yarattım, umarım yardımcı olur:

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

Daha genel bir işlevsel yaklaşımı seviyorum:

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

veya,

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

herhangi bir radyan alma işlevi ile kullanılabilir:

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

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

Bu yardımcı olur umarım!


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.