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:
В этот день... 1 April
Info Guide #13,
ACNews #50,
Avro News #01,
ACNews #47,
ACNews #40,
ACNews #29,
Black Metall #01,
ACNews #16,
Adventurer #13,
Polesse #19,
Subliminal Extacy #03,
ZX Pilot #37,
Always #03,
Born Dead #0G,
Odyssey paper #08,
Optron #26,
City #08,
Zodiac #02,
Polesse #05,
Nicron #108,
X-Magazine #10,
Nicron #82,
Energy #01,
Sorrow News #03,
Sorrow News #02,
Proton #27,
Think #08,
Wallpaper #01,
Spectrum Progress #03,
Spectrum Expert #02,
Micro #01,
X-Files #02,
Gorodok #05,
Deja Vu #04,
Anecdotes #01,
X-Files #02,
Maximum #35,
Impulse #01,
Spectrofun #01,
Faultless #07,
Breeze #06,
Nicron #27,
Echo #03,
Oberon #01,
Spectrofon #19,
On-Line #30,
Sinclair Town #01,
Sinclair Classic #04,
Spectrofon #04