Làm thế nào tôi có thể lấy sin, cos và tan để sử dụng độ thay vì radian?


100

Khi tôi làm việc với toán học trong JS, tôi muốn các hàm trig của nó sử dụng giá trị độ thay vì giá trị radian. Tôi sẽ làm điều đó như thế nào?


19
sin / cos / tan không trả về góc tính bằng radian; chúng lấy góc tính bằng radian. Các chức năng nghịch đảo atan(), atan2(), acos(), asin()trở lại góc.
Jason S

Câu trả lời:


214

Bạn có thể sử dụng một chức năng như thế này để thực hiện chuyển đổi:

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

Lưu ý rằng các hàm như sin, cosv.v. không trả về góc , chúng lấy góc làm đầu vào. Đối với tôi, có vẻ như sẽ hữu ích hơn cho bạn nếu có một hàm chuyển đổi đầu vào độ thành radian, như sau:

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

mà bạn có thể sử dụng để làm điều gì đó như thế nào tan(toRadians(45)).


27

Nhân đầu vào Math.PI/180với để chuyển đổi từ độ sang radian trước khi gọi các hàm trig của hệ thống.

Bạn cũng có thể xác định các chức năng của riêng mình:

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

và như thế.


2
Điều này thực sự nên được đặt tên sinDegreesđể tránh nhầm lẫn
BlueRaja - Danny Pflughoeft

Thật. Tôi đã thấy một số trang web gọi là sindđể giữ cho nó ngắn gọn. Cá nhân tôi giữ nó sinvì tôi biết rằng sinsau đó sẽ tính bằng độ và Math.sinradian, nhưng đó là do tôi nghĩ.
Niet the Dark Absol

6
-1: sin () không trả về một góc. Đối số đầu vào của nó là một góc.
Jason S

1
Cái đó ... cái đó đã tránh xa tôi. Tôi biết điều đó. Tất nhiên tôi biết điều đó. Tôi sẽ không đã thực hiện một trò chơi bazillion với trang điểm chức năng nếu tôi đã không ... nhưng đối với một số lý do tôi kinda hoàn toàn quên rằng = /
Niết Dark Absol

Tôi là một noob và tệ với trig ... tôi có thể hỏi phương trình của cosDeg và tanDeg sẽ như thế nào không? cảm ơn bạn.
Kama

14

Tôi đã tạo Math-Object lười biếng của riêng mình cho mức độ (MathD), hy vọng nó sẽ giúp:

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

Tôi thích một cách tiếp cận chức năng tổng quát hơn:

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

hoặc là,

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

có thể được sử dụng với bất kỳ hàm lấy radian nào:

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

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

Hi vọng điêu nay co ich!


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.