Сделаем программу, которая рисует под музыку вращающиеся "щупальца".
Добавим в проект файл music.mid.
Приступим к написанию кода:
program vis; const S = 12; // Кол-во щупалец N = 8; // Кол-во звеньев в каждом из них var i, j : Integer; x, y : Real; tx, ty : Real; k, d : Real; // Углы поворота звеньев относительно друг-друга a : array [1..N] of Real; // Длина одного звена len : Real; begin // Инициализация звука if not OpenPlayer('/music.mid', 'audio/midi') then // загрузка музыки Halt; // ошибка при загрузке (не поддерживается midi формат или звук отключен) if not SetPlayerCount(-1) then // проигрывать бесконечное число раз Halt; if not StartPlayer then // начать проигрывание Halt; // Нам необходимо создать что-то графическое... // Расчёт длины звена, в зависимости от размеров экрана if GetWidth > GetHeight then len := GetHeight/2/N else len := GetWidth/2/N; randomize; k := random(360) * pi / 180; d := pi * 2 / S; // просто оптимизиация // Главный цикл repeat // Расчёт коэфицента поворота if random(50) = 0 then k := random(360) * pi / 180; // Поворот всех щупалец a[1] := a[1] + sin(k)/10; // Интерполяция углов между щупальцами for i := 2 to N do a[i] := a[i] + (a[i - 1] - a[i]) * 0.1; // Рисуем результат (под музыку ;) SetColor(0, 0, 0); FillRect(0, 0, GetWidth, GetHeight); // Стираем всё for j := 0 to S - 1 do begin x := 0.5 * GetWidth; y := 0.5 * GetHeight; for i := 2 to N do begin SetColor(255, trunc(255 - 255 * i/N), 255); // Немного школьной тригонометрии :) tx := x + cos(j * d + a[i]) * len; ty := y + sin(j * d + a[i]) * len; DrawLine(trunc(x), trunc(y), trunc(tx), trunc(ty)); x := tx; y := ty; end; end; // Вывод на дисплей repaint; until GetKeyClicked = KE_KEY0; // Закрыть приложение при нажатии "0" StopPlayer; end. |
Самыми медленными операциями в этой программе являются вызовы тригонометрических функций (sin и cos). Существует возможность их оптимизации при помощи использования заранее рассчитанных таблиц значений. Помимо этого, скорость работы данного приложения на различных телефонах может быть различной...
К содержанию
|
|
![]() |
Скачать новую версию данного учебника в одном архиве
Курс находится в процессе разработки, поэтому архив постоянно обновляется! |