Войти
ПрограммированиеФорумОбщее

Вычислить Sin и Cos

Страницы: 1 2 37 8 Следующая »
#0
15:05, 8 апр. 2018

Всем привет. Требуется вычислить синус и косинус.
Формула известна: Sin A = X/Radius, Cos A = Y/Radius.
Отсюда вопрос: как получить величину X и Y, если известен только угол?
Тут картинка:

+ Показать

#1
15:29, 8 апр. 2018

Функцией из стандартной библиотеки, ясен пень.
Ну или для извращенцев есть ряд Тейлора.

#2
16:01, 8 апр. 2018

Мне надо понять откуда берутся формулы вроде Sqrt(2.0) / 2.0 = 0,7071067....
Как вычислить откуда взялась двойка и почему надо делить корень из двух на двойку при 45°, например.

#3
16:21, 8 апр. 2018

eDmk
> Отсюда вопрос: как получить величину X и Y, если известен только угол?
Выразить их из формулы и посчитать?

#4
(Правка: 17:02) 16:45, 8 апр. 2018

eDmk
> Мне надо понять откуда берутся формулы вроде Sqrt(2.0) / 2.0 = 0,7071067....
> Как вычислить откуда взялась двойка и почему надо делить корень из двух на
> двойку при 45°, например.
По формуле Эйлера,
Изображение
Очевидно, что при угле в 90°,
Изображение
С другой стороны,
Изображение
Раскрывая скобки, получаем
Изображение
То есть,
Изображение
Отсюда,
Изображение

Внимательный школьник может спросить - «Делфи, почему не геометрически?» На что я отвечаю - потому что геометрия для школьников алгебраический метод проще обобщить для произвольных углов.

P.S. форумный парсер - лох.
#5
20:34, 8 апр. 2018

eDmk
> Отсюда вопрос: как получить величину X и Y, если известен только угол?
r - радиус круга
q - угол поворота
x = r cos q
y = r sin q

#6
21:28, 8 апр. 2018

Спс всем. Сделал через ряды Тейлора.

#7
1:08, 9 апр. 2018

eDmk
> Отсюда вопрос: как получить величину X и Y, если известен только угол?
x = radius * sin(a)
y = radius * cos(a)
eDmk
> Сделал через ряды Тейлора.
Однако. Так вопрос был в том как сами функции cos/sin вычисляются?

#8
1:21, 9 апр. 2018

>Так вопрос был в том как сами функции cos/sin вычисляются?
Да. Если есть варианты - буду рад почитать.

#9
(Правка: 1:37) 1:26, 9 апр. 2018

eDmk
А чем стандартные функции не подошли?
eDmk
> Если есть варианты - буду рад почитать.
Все будет зависеть от конечного алгоритма использования этих функций, но от тяжеловесных функций лучше избавляться на корню. И это не столько альтернатива вычислению сколько алгоритмическая оптимизация.

#10
1:40, 9 апр. 2018

>А чем стандартные функции не подошли?
Да нормально подходят. Решил на досуге размять мозги :)
Ведь процессор SinCos как то считает и ничего не знает про катеты и гипотенузы.

Да, получилось тяжеленько, но все идет через таблицы. Пока что из таблиц выборка быстрее чем расчет на процессоре.

#11
(Правка: 1:46) 1:46, 9 апр. 2018

eDmk
> Да, получилось тяжеленько, но все идет через таблицы. Пока что из таблиц
> выборка быстрее чем расчет на процессоре.
Поэтому от них избавляются заменяя значение угла на значение самих функций от этого угла. Например если твой угол A вычисляется, то проще взять исходные значения чем сам угол. Или использовать константы, допустим у тебя происходит поворот вектора на 10 градусов, скажем тебе нужно нарисовать циферблат. Берутся заранее вычисленные значения от угла 10, и используют его для получения следующей позиции.

#12
2:12, 9 апр. 2018

Да там таблица 500 Kb. Вычисляется заранее.
Норм. Типа таблицы Брадиса :)

#13
4:15, 9 апр. 2018

eDmk
> Пока что из таблиц выборка быстрее чем расчет на процессоре.
Ага, пока ты ничего, кроме нахождения sin/cos, не делаешь.

> Да там таблица 500 Kb. Вычисляется заранее.
Засрал весь кеш L1 и половину L2. Алгоритм с таблицей, которая целиком помещается в L1 (+ интерполяция 1/2/3/4 порядка) порвет эти "таблицы Брадиса" как тузик грелку.
Но, в реальности, вычисления sin/cos обычно составляет малую часть всего расчета и в кеше должно лежать что-то полезное помимо sin/cos таблиц.

#14
5:31, 9 апр. 2018

eDmk
> Спс всем. Сделал через ряды Тейлора.
ряды хорошо сходятся только в окрестности нуля. например, аппроксимированный рядом косинус пройдёт через точку (0, 1), но не пройдёт через точку (pi/2, 0) или через (pi, -1). поэтому иногда лучше использовать другой сплайн для приближения.

Страницы: 1 2 37 8 Следующая »
ПрограммированиеФорумОбщее