【发布时间】:2012-03-31 02:22:15
【问题描述】:
当我在 JS 中处理数学时,我希望它的三角函数使用度数值而不是弧度值。我该怎么做?
【问题讨论】:
-
sin/cos/tan 不以弧度返回角度;它们以弧度表示角度。反函数
atan()、atan2()、acos()、asin()返回角度。
标签: javascript math
当我在 JS 中处理数学时,我希望它的三角函数使用度数值而不是弧度值。我该怎么做?
【问题讨论】:
atan()、atan2()、acos()、asin() 返回角度。
标签: javascript math
在调用系统三角函数之前,将输入乘以Math.PI/180 以将度数转换为弧度。
您也可以定义自己的函数:
function sinDegrees(angleDegrees) {
return Math.sin(angleDegrees*Math.PI/180);
};
等等。
【讨论】:
sinDegrees以避免混淆
sind 来保持简短。我个人将其保留为sin,因为我知道sin 将以度为单位,Math.sin 以弧度为单位,但这是我自己的想法。
e-17 告诉你它是0.00000000000000006123...
您可以使用这样的函数进行转换:
function toDegrees (angle) {
return angle * (180 / Math.PI);
}
请注意,sin、cos 等函数不返回角度,它们将角度作为输入。在我看来,拥有一个将度数输入转换为弧度的函数对您来说会更有用,如下所示:
function toRadians (angle) {
return angle * (Math.PI / 180);
}
你可以用它来做类似tan(toRadians(45))的事情。
【讨论】:
创建您自己的应用所需数学的转换函数,然后调用这些函数。 http://en.wikipedia.org/wiki/Radian#Conversion_between_radians_and_degrees
【讨论】:
我为学位 (MathD) 创建了自己的小懒惰数学对象,希望对您有所帮助:
//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)));
}
};
【讨论】:
我喜欢更通用的函数式方法:
/**
* 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);
或者,
function dTrig(trigFunc, angle) {
return trigFunc(angle * Math.PI / 180);
}
可与任何弧度测量功能一起使用:
dTrig(Math.sin, 90);
// -> 1
dTrig(Math.tan, 180);
// -> 0
希望这会有所帮助!
【讨论】:
Math.asin())并且您想获得度数作为输出怎么办?公认的答案是使用适量的函数式编程。将函数不必要地用作参数并不能使其成为函数式编程方法。
有一个project with more than a thousand stars on GitHub 提供了从度数转换为弧度和将弧度转换为度数的函数。
安装:
npm i @stdlib/math
要导入:
const rad2deg = require('@stdlib/math/base/special/rad2deg')
const deg2rad require('@stdlib/math/base/special/deg2rad')
使用方法:
console.log(Math.sin(deg2rad(90)))
console.log(rad2deg(Math.asin(1)))
【讨论】: