Функция sin ожидает радиан. Если вы хотите получить степень, вам нужно перевести градусы в радианы.
Как ты это делаешь?
Simple.
В круге 360 градусов. Сколько радиана там?
Радиан определяется как отношение длины дуги перед углом, деленное на радиус.
Итак, для полного круга длина дуги - это просто окружность круга.
Какова полная окружность круга?
Ну, π определяется как отношение длины окружности к диаметру.
Что такое диаметр?
Ну, диаметр в 2 раза больше радиуса. По сути, диаметр - это линия, которая проходит через центр круга и заканчивается, когда линия встречается с кругом. Радиус - это линия, которая начинается в центре и заканчивается в круге.
So
Окружность окружности равна π * диаметр = π * 2 * радиус = 2π радиус. Это сокращено до 2πr, где r - радиус.
Итак, сколько радианов в круге?
Easy
Вы делите окружность круга с радиусом. Тада у тебя 2πr / r = 2π.
И это 2π эквивалентно 360 градусам.
Итак, если мы знаем степень, как мы узнаем радиан?
Просто, мы умножаем на 2π и делим это на 360.
Таким образом, мы умножаем все на 2π / 360 = π / 180.
Чтобы увидеть это, представьте, что радиан и градус - это «единицы». Существует π радиан на каждые 180 градусов. Это означает, что π радиан / 180 градусов - это единица, потому что это соотношение одинакового числа.
Так что, если у вас 107 градусов, то 107
IS 107 градусов * 1 = 107 градусов * π радиан / 180 градусов. Конечно, компьютер не заботится об устройстве. В конце оно становится 107 * π / 180.
В Objective-c M_PI является константой, в которой хранится значение π.
Что бы я сделал, я бы объявил
#define radianperdegree (M_PI/180)
Теперь значение на самом деле не равно 1. Однако концептуально радианая степень действительно равна 1, если принять во внимание единицу. Это потому, что 1 радиан намного больше, чем 1 градус.
Чтобы получить угол в радианах, я не должен менять угол. Что я делаю, так это умножаю это на число, которое концептуально равно 1. Поэтому я умножаю на радиан в градусах. Результат - намного меньшее число. Но это гораздо меньшее число представляет точно такой же угол. Это потому, что гораздо меньшее число - это размер угла в радианах, а каждый радиан больше.
Тогда я делаю
double result = sin(100.7 * radianperdegree);
Тад .....
Очистить
Еще одна вещь, которую вы можете сделать, это определить
#define RADTODEG(x) ((x) * 57.29578)
#define DEGTORAD(x) ((x) / 57.29578)
А затем используйте грех (DEGTORAD (107))