Коли я працюю з математикою в JS, я хотів би, щоб його триггерні функції використовували значення градусів замість радіанових значень. Як би я це зробив?
Коли я працюю з математикою в JS, я хотів би, щоб його триггерні функції використовували значення градусів замість радіанових значень. Як би я це зробив?
Відповіді:
Ви можете використовувати таку функцію, щоб здійснити перетворення:
function toDegrees (angle) {
return angle * (180 / Math.PI);
}
Зверніть увагу , що функції , такі як sin
, cos
і так далі , не повертаються кутів , вони приймають кути в якості вхідних даних. Мені здається, вам було б корисніше функція, яка перетворює градусний вхід в радіани, наприклад:
function toRadians (angle) {
return angle * (Math.PI / 180);
}
яку ви могли використовувати, щоб зробити щось подібне tan(toRadians(45))
.
Помножте вхід Math.PI/180
на перетворення від градусів до радіанів, перш ніж викликати функції триггера системи.
Ви також можете визначити власні функції:
function sinDegrees(angleDegrees) {
return Math.sin(angleDegrees*Math.PI/180);
};
і так далі.
sinDegrees
щоб уникнути плутанини
sind
це тримати його коротко. Я особисто дотримуюся цього, sin
бо знаю, що sin
тоді буде в градусах і Math.sin
в радіанах, але це на моїй голові.
Я створив власний маленький лінивий Math-Object для ступеня (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
Сподіваюся, це допомагає!
Створіть власну функцію перетворення, яка застосовує необхідну математику, та наведіть натомість їх. http://en.wikipedia.org/wiki/Radian#Conversion_between_radians_and_degrees
atan()
,atan2()
,acos()
,asin()
кути повернення.