Як можна змусити гріх, соз і загар використовувати градуси замість радіану?


101

Коли я працюю з математикою в JS, я хотів би, щоб його триггерні функції використовували значення градусів замість радіанових значень. Як би я це зробив?


19
sin / cos / tan не повертають кути в радіанах; вони приймають кути в радіанах. Зворотні функції atan(), atan2(), acos(), asin()кути повернення.
Jason S

Відповіді:


215

Ви можете використовувати таку функцію, щоб здійснити перетворення:

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

Зверніть увагу , що функції , такі як sin, cosі так далі , не повертаються кутів , вони приймають кути в якості вхідних даних. Мені здається, вам було б корисніше функція, яка перетворює градусний вхід в радіани, наприклад:

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

яку ви могли використовувати, щоб зробити щось подібне tan(toRadians(45)).


27

Помножте вхід Math.PI/180на перетворення від градусів до радіанів, перш ніж викликати функції триггера системи.

Ви також можете визначити власні функції:

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

і так далі.


2
Це дійсно має бути названо, sinDegreesщоб уникнути плутанини
BlueRaja - Danny Pflughoeft

Правда. Я бачив, що деякі дзвінки на сайтах - sindце тримати його коротко. Я особисто дотримуюся цього, sinбо знаю, що sinтоді буде в градусах і Math.sinв радіанах, але це на моїй голові.
Niet the Dark Absol

6
-1: sin () не повертає кут. Його вхідним аргументом є кут.
Джейсон S

1
Той ... той утік від мене. Я це знаю. Звичайно, я це знаю. Я б не робив мільярдних ігор з триггерними функціями, якби не ... але чомусь я зовсім забув про це = /
Niet the Dark Absol

Я noob і поганий з trig ... чи можу я запитати, як виглядатимуть рівняння cosDeg та tanDeg? спасибі.
Кама

14

Я створив власний маленький лінивий 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)));
   }
};

4

Мені подобається більш загальний функціональний підхід:

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

Сподіваюся, це допомагає!


0

Створіть власну функцію перетворення, яка застосовує необхідну математику, та наведіть натомість їх. http://en.wikipedia.org/wiki/Radian#Conversion_between_radians_and_degrees


6
Хоча це теоретично може відповісти на питання, бажано було б сюди включити істотні частини відповіді та надати посилання для довідки.
Джейсон C
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.