При программировании графики довольно часто приходится юзать тригонометрию,
в частности синусы и косинусы.
Для быстрого получения приближенного значения часто используют такую схему:
сначала вычисляется тангенс через быстро сходящийся ряд:
tan(x) = x/(1-x^2/(3-x^2/(5-x^2/(7-x^2/...))))
(5-7 итераций для float вполне хватает)
А затем вычисляют искомые синус и косинус по формулам:
sin(x)=2*tan(x)/(1+tan(x)^2);
cos(x)=(1-tan(x)^2)/(1+tan(x)^2);
Далее производят расширение на всю окружность (т.к в данном случае мы получаем значения
только в диапазоне [0;PI/4])
Но это я отвлекся, вообще я хотел описать другой метод :)
А именно, когда точность не столь важна, но нужна еще бОльшая скорость
(и простота написания функции ;) можно сделать следующий трюк:
мы заранее рассчитываем значения синусов и косинусов с необходимым шагом,
составляем табличку значений, и в дальнейшем уже юзаем эти табличные значения.
Здесь мы получаем табличку синусов и косинусов в градусной мере с шагом в 1 градус.
Перед использованием приводим "аргумент" (индекс массива) к int и все!
remal
У тебя есть тесты, говорящие в пользу твоего вывода?
В любом случае, табличная выборка страдает погрешностями, приемлемыми в одних случаях, и неприемлемыми в других.
remal > Этот метод стар, как дедушкин автомобиль, сейчас быстрее расчитать на процессоре!
На сколько я знаю, быстрее получится либо при о-oчень малой точности либо при расчетах в потоке с использованиеа SSE.
В собственно коде:
float x=_sin[(int)alpha)];
есть очень нехорошее приведение float к int, которое, если не применять дополнительных мер, достаточно тормозно.
Если учесть представление формата float то можно обойтись без явного приведения. Правда, в этом случае, шаг таблицы будет неравномерный.
Для стандартных тригонометрических функций такая "оптимизация" неактуальна лет восемь. Что не мешает применить её к каким-нибудь юзерским сложным функциям. :)
Оно специально для анимаций, где углы Эйлера хранятся в 16 битах. Для абсолютно точной таблицы. В general быстрой тригонометрии смысла особого не вижу.