procedure TScrForm.DeactivateScrSaver(var Msg : TMsg; var Handled : boolean);
{определение движения мышки или нажатия на клавиатуре}
var
done: boolean;
begin
if Msg.message = WM_MOUSEMOVE then {сдвинулась мышка}
done := (Abs(LOWORD(Msg.lParam) - crs.x) > 5) or
(Abs(HIWORD(Msg.lParam) - crs.y) > 5)
else {key / mouse нажаты?}
done := (Msg.message = WM_KEYDOWN) or (Msg.message = WM_KEYUP) or
(Msg.message = WM_SYSKEYDOWN) or (Msg.message = WM_SYSKEYUP) or
(Msg.message = WM_ACTIVATE) or (Msg.message = WM_NCACTIVATE) or
(Msg.message = WM_ACTIVATEAPP) or (Msg.message = WM_LBUTTONDOWN) or
(Msg.message = WM_RBUTTONDOWN) or (Msg.message = WM_MBUTTONDOWN);
if done then
Close;
end;
Для указания компилятору, что мы пишем именно хранителя в главный файл проекта (*.dpr) добавляем после описания модулей следующую директиву
{$D SCRNSAVE Curlicy}
Второе слово здесь означает название вашего хранителя. Меняем название проекта на Curlicy и наново сохраняем проект под тем же именем Curlicy.dpr
Теперь войдите в папку, где вы сохраняли проект, найдите exe файл и измените у него расширение на scr
Осталось скопировать полученный файл в папку Windows\System32 и подключить хранителя
КОНТРОЛЬНЫЕ ЗАДАНИЯ
Как правило, на экране помещается только часть фрактала. Ваша задача так изменить алгоритм, чтобы на экран влезал весь фрактал
Попробуйте переписать алгоритм создания фрактала, чтобы по мере его роста он постепенно уменьшался, но постоянно оставался на экране целиком
ЛИТЕРАТУРА
Delphi 5: учебный курс, С. Бобровский, Питер 2002 г.
Аладьев В.З., Хунт Ю.Я., Шишаков М.Л., Основы информатики. Учебное пособие, М., Филин, 1998, 496с.
Информатика. Учебник под ред. Проф. Н.В. Макаровой, Финансы и статистика, 2001, 768с.
Балафанов Е.К., Бурибаев Б., Даулеткулов А.. 30 уроков по информатике, Алматы, Джагамбек, 1999г, 442с (на русском и казахском языках)
Лабораторная работа № 15
Лепестки, цветы, улитки
ЦЕЛЬ РАБОТЫ
Цель лабораторной работы – освоение студентами основных понятий программирования, интерфейса среды программирования методов управления свойствами компонент.
СОЗДАНИЕ SCREENSAVER (ХРАНИТЕЛЯ ЭКРАНА)
Откройте среду программирования Delphi
Создайте по рекомендациям предыдущей лабораторной работы хранителя экрана. Рабочим алгоритмом выберите следующий алгоритм построения линий в полярных координатах
Н ачните, например, с уравнения R = R0sinφ — даже без запуска программы ясно (при минимальных знаниях тригонометрии, конечно), что мы получим два лепестка, так как синус дважды равен нулю — в начале цикла при φ = 0 и при φ = 180°. А при φ = 90° и φ = 270° получим максимум и минимум соответственно. Все — больше никаких особых знаний не надо для продолжения захватывающих опытов. Первое, что просится — попробовать ввести множитель n для угла: R = R0sin(nφ). Заранее предскажем, что при n = 2 нарисуется цветок с четырьмя лепестками, при n = 3 — с шестью и так далее. Или наоборот, взять n = 0,5 — нарисуется однолепестковая похожая на сердечко фигура, так и называемая из-за этого «кардиоидой». Кардиоида является частным случаем замечательной кривой — «улитки Паскаля», о ее занимательных свойствах расскажем в следующий раз. А что будет при n = 1,5 или даже при n = 1,25? Тут рассуждения не помогут — надо начинать рисовать, пробовать менять n и каждый раз удивляться полученной фигуре.
К огда освоитесь — следующий шаг. R = R1 − R0sinφ — то есть, мы из окружности вычитаем наши лепестки. Рассмотрите разные соотношения R1 и R0. Это довольно занятно. Постепенно вы научитесь заранее предсказывать вид полученной линии при любых параметрах уравнения R1 − R0sin(nφ). Развивать забаву можно в разных направлениях; один из любимых вариантов — добавить еще слагаемых с разными значениями параметров: R1 − R0sin(nφ) + R2sin(mφ) и получить цветки сирени, листики, розочки и прочие красивости. А еще можно возводить sin(nφ) в какую-нибудь степень (целую, конечно), что позволит «заострить» лепестки, причем важна четность этого показателя — при четном показателе «отрицательные» лепестки становятся «положительными», стоит попробовать! Но мы идем дальше в выбранном направлении — создаем еще один внешний цикл и меняем в нем радиус. Получаем семейство лепестков, растущих из одного центра. И тут делаем небольшую корректировочку, в которой, собственно и состоит вся изюминка. В аргумент синуса добавляем (с коэффициентом, естественно) текущий радиус! Это позволяет каждый следующий слой немного закручивать относительно предыдущего, что и порождает не просто лепестки, а пропеллеры, крыльчатки, улитки прочие чудеса — в зависимости от параметров. И дает простор для бесконечных опытов.
Примерный код для рисования лепестков с параметром при аргументе синуса приведён ниже
Достарыңызбен бөлісу: |