|
ru.algorithms- RU.ALGORITHMS ---------------------------------------------------------------- From : Ivan Storogev 2:5020/400 04 Jun 2002 06:24:39 To : Dmitrij Matkov Subject : Re: синтез синусоидального сигнала --------------------------------------------------------------------------------
Привет Dmitrij,
Sunday, June 2, 2002, 8:32:04 PM, вы писали:
DM> Ищется алгоpитм сабжа.
Фактически вам нужен алгоритм равномерного вращения вектора
вокруг начала координат. Тогда радиус вектора -- это амплитуда
sin/cos, а координаты конца -- текущие значения функций.
В дальнейшем x - это текущий синус, а y - текущий косинус.
Классический алгоритм поворота, в нем 4 умножения и 2 сложения
на итерацию:
//Входные данные
//R -- амплитуда
//alpha -- шаг изменения аргумента функции в радианах
//Инициализация
S := sin(alpha);
C := cos(alpha);
x := 0;
y := R:
//Главный цикл
loop
xt := x; yt := y;
x := xt*C - yt*S;
y := yt*C + xt*S;
end loop;
Вот взятый из книжки Р. Брейсуэлла "Преобразование Хартли"
алгоритм, в нем 3 умножения и 3 сложения на итерацию:
//Входные данные
//R -- амплитуда
//alpha -- шаг изменения аргумента функции в радианах
//Инициализация
x := 0; y := R;
dSin := sin(alpha);
dTg := tg(alpha/2);
//Главный цикл
loop
temp := y+x*dTg;
x := x - temp*dSin;
y := x*dTg + temp;
end loop
Если вас интересует целочисленная арифметика, приглядитесь к
алгоритмам рисования окружности, например Брезенхема.
Правда они выдают последовательность sin/cos для _неравномерного_
вращения по окружности.
--
Всех благ, Иван.
Отправлено через сервер Форумы@mail.ru - http://talk.mail.ru
--- ifmail v.2.15dev5
* Origin: KKK (2:5020/400)
Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.algorithms/1506c3abe716.html, оценка из 5, голосов 10
|