Body #24
17 января 2001

■························[Математика]·························■

Q:  Объясните  мне  пожалуйста  смысл,  как вычисляется синус по
таблице.    Вроде,    как    я    понял,   таблица   вычисляется
sint=round(sin(i/256)*127+128),  тогда  как  например  посчитать
синус  30rp., то есть sin(pi/6)? И вообще, что это за магические
цифры 127,128?

A: [Alexander Shulepov 2:5020/1737.25]

Начнем  с  азов.  В круге y нас 360 градусов, или 2*Pi. Но число
360  нам несколько не удобно, так как если мы будем использовать
precalculate  (то  есть создание массива со значениями sin/cos в
каждом  из 360 градусов) нам придется отслеживать ситуации когда
угол  синус/косинус,  которого  мы  хотим  найти  находится  вне
промежутка  0..360  градусов  (на самом деле 0..359, так как 0 и
360  градусов  -  это один и тот же угол) и пpиобpазовывать этот
угол  в соответствующий ему, лежащий в указанном промежутке. Как
нам  этого  избежать?  Да  очень  просто, поделим круг не на 360
частей, а на 256, тогда снимается проблема отслеживания значения
угла.  Нам  достатючно  использовать  тип  char для переменной в
которой   хранится   значение  угла.  Все  проверки  выполняются
автоматически  и  не  жрут  ресурсов. Формулы для преобразований
выводятся  элементарно.  Теперь насчет магических чисел... Почти
везде  стараются  заменить числа с плавающей запятой, на числа с
фиксированной точкой. Если fixed point y нас x.8, то все числа с
плавающей точкой умножаются на 256. В примере с водичкой, массив
высот  был типа unsigned char, то есть максимальная высота равна
255.  Вют  отсюда  и  берутся  числа 127, 128. 128 - это уровень
спокойной воды, а 127 есть амплитуда колебаний волн. Вот в итоге
и получается формула: sintable[k]=sin(2*PI*k/256)*127+128;




Other articles:


Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Similar articles:
From the Author - Hope that the newspaper will soon be a dial-up ...
Iron - ALTERA: Programmable Logic ICs (free materialchik).
Advertising - Free Advertisement.

В этот день...   21 November