Программирование игр, создание игрового движка, OpenGL, DirectX, физика, форум
GameDev.ru / Программирование / Форум / Вычислить Sin и Cos

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

Страницы: 1 2 37 8 Следующая »
eDmkУчастникwww8 апр. 201815:05#0
Всем привет. Требуется вычислить синус и косинус.
Формула известна: Sin A = X/Radius, Cos A = Y/Radius.
Отсюда вопрос: как получить величину X и Y, если известен только угол?
Тут картинка:
+ Показать
TelVoltПостоялецwww8 апр. 201815:29#1
Функцией из стандартной библиотеки, ясен пень.
Ну или для извращенцев есть ряд Тейлора.
eDmkУчастникwww8 апр. 201816:01#2
Мне надо понять откуда берутся формулы вроде Sqrt(2.0) / 2.0 = 0,7071067....
Как вычислить откуда взялась двойка и почему надо делить корень из двух на двойку при 45°, например.
Андрей5000Постоялецwww8 апр. 201816:21#3
eDmk
> Отсюда вопрос: как получить величину X и Y, если известен только угол?
Выразить их из формулы и посчитать?
DelfigamerПостоялецwww8 апр. 201816:45#4
eDmk
> Мне надо понять откуда берутся формулы вроде Sqrt(2.0) / 2.0 = 0,7071067....
> Как вычислить откуда взялась двойка и почему надо делить корень из двух на
> двойку при 45°, например.
По формуле Эйлера,
Изображение
Очевидно, что при угле в 90°,
Изображение
С другой стороны,
Изображение
Раскрывая скобки, получаем
Изображение
То есть,
Изображение
Отсюда,
Изображение

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

P.S. форумный парсер - лох.

Правка: 8 апр. 2018 17:02

amd.fx6100Постоялецwww8 апр. 201820:34#5
eDmk
> Отсюда вопрос: как получить величину X и Y, если известен только угол?
r - радиус круга
q - угол поворота
x = r cos q
y = r sin q
eDmkУчастникwww8 апр. 201821:28#6
Спс всем. Сделал через ряды Тейлора.
foxesПостоялецwww9 апр. 20181:08#7
eDmk
> Отсюда вопрос: как получить величину X и Y, если известен только угол?
x = radius * sin(a)
y = radius * cos(a)
eDmk
> Сделал через ряды Тейлора.
Однако. Так вопрос был в том как сами функции cos/sin вычисляются?
eDmkУчастникwww9 апр. 20181:21#8
>Так вопрос был в том как сами функции cos/sin вычисляются?
Да. Если есть варианты - буду рад почитать.
foxesПостоялецwww9 апр. 20181:26#9
eDmk
А чем стандартные функции не подошли?
eDmk
> Если есть варианты - буду рад почитать.
Все будет зависеть от конечного алгоритма использования этих функций, но от тяжеловесных функций лучше избавляться на корню. И это не столько альтернатива вычислению сколько алгоритмическая оптимизация.

Правка: 9 апр. 2018 1:37

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

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

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

Правка: 9 апр. 2018 1:46

eDmkУчастникwww9 апр. 20182:12#12
Да там таблица 500 Kb. Вычисляется заранее.
Норм. Типа таблицы Брадиса :)
}:+()___ [Smile]Постоялецwww9 апр. 20184:15#13
eDmk
> Пока что из таблиц выборка быстрее чем расчет на процессоре.
Ага, пока ты ничего, кроме нахождения sin/cos, не делаешь.

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

SuslikМодераторwww9 апр. 20185:31#14
eDmk
> Спс всем. Сделал через ряды Тейлора.
ряды хорошо сходятся только в окрестности нуля. например, аппроксимированный рядом косинус пройдёт через точку (0, 1), но не пройдёт через точку (pi/2, 0) или через (pi, -1). поэтому иногда лучше использовать другой сплайн для приближения.
Страницы: 1 2 37 8 Следующая »

/ Форум / Программирование игр / Общее

2001—2018 © GameDev.ru — Разработка игр