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:
about the software - new items: Horror Word 1.01, Best view 2.13, RIP # 15, MSF # 24, Lamergy, ZX-Guide # 4.5, AC Editor 0.63, Psychoz # 6-12, Star Craft_demo, Real Commander 2.3, Love Maker, Heresy # 8-10, Body # 3b, ZX-Time # 9, Fantastic # 66, ZX-Chart 3, Net Spec info # 1, RIP 0.21, Ebelka, Buzz 20, Nicron # 124, Depress # 0.
Story - The story "Persona Grata".
Entry - the contents of rooms.

В этот день...   16 August