понедельник, 25 февраля 2013 г.

Анимация

1. Движение шарика

Алгоритм движения следующий:  пером красного цвета рисуем параметризованную окружность (изменяемые параметры - координаты центра), заливаем круг внутри окружности красным цветом. Делаем задержку. Очищаем экран в цвет фона (т.е. стираем шарик). За счет изменения параметра получаем необходимое  смещение шарика.
Пример программы, где шарик движется по диагонали.
Uses GraphABC;
var i:integer;

procedure shar(a:integer);
var k,m:integer;
begin
SetPenColor(clRed);
Circle(a,a, 50);
FloodFill(a,a,clRed );
for k:=1 to 100000 do m:=m+1;
ClearWindow(clSilver );
end;

begin
SetWindowHeight(500);
SetWindowWidth(500);
ClearWindow(clSilver );
for i:=1 to 500 do shar(i);
end.
Задание 1. Измените цвет шарика на зеленый, а цвет фона на желтый.
Задание 2. Измените программу таким образом, чтобы шарик двигался по горизонтали в центре окна.
Задание 3. Измените программу таким образом, чтобы шарик двигался по вертикали в центре окна.
Задание 4. Измените программу таким образом, чтобы шарик двигался по второй диагонали сверху вниз.

2. Изменение размера шарика

Пример программы рисующей раздувающийся пузырь. Центр пузырика стоит на месте, увеличивается радиус.

Uses GraphABC;
var i:integer;

procedure shar(a:integer);
var k,m:integer;
begin
SetPenColor(clSkyBlue);
Circle(250,250, a);
FloodFill(250,250,clSilver);
for k:=1 to 100000 do m:=m+1;
ClearWindow(clSilver );
end;

begin
SetWindowHeight(500);
SetWindowWidth(500);
ClearWindow(clSilver );
for i:=1 to 250 do shar(i);
end.
Задание 1. Измените цвет пузырика и цвет фона.
Задание 2Измените программу таким образом, чтобы пузырик увеличивался и двигался по главной диагонали.

вторник, 19 февраля 2013 г.

Графика в PABC (продолжение)

1. Параметризованная графика

Задача 1.
Напишите программку рисования домика, где ширина домика вводится с клавиатуры.

Для рисования используйте следующие графические примитивы:
MoveTo(x,y) - передвигает невидимое перо к точке с координатами (x,y); эта функция работает в паре с функцией LineTo(x,y).
LineTo(x,y) - рисует отрезок от текущего положения пера до точки (x,y); координаты пера при этом также становятся равными (x,y).
Line(x1,y1,x2,y2) - рисует отрезок с началом в точке (x1,y1) и концом в точке (x2,y2).

Задача 2.
Напишите программу, которая имеет 3 процедуры для рисования трех фигур: прямоугольника, окружности и треугольника. Пользователь должен ввести комбинацию трех целых положительных чисел. Если число равно 0, то данная фигура не рисуется, если не 0, то выводится на экран фигура, для которой данное число определяет линейный размер.

2. Графические примитивы для рисования кривых

Ellipse(x1,y1,x2,y2) - рисует эллипс, заданный своим описанным прямоугольником с координатами противоположных вершин (x1,y1) и (x2,y2).
Arc(x,y,r,a1,a2) - рисует дугу окружности с центром в точке (x,y) и радиусом r, заключенной между двумя лучами, образующими углы a1 и a2 с осью OX (a1 и a2 – вещественные, задаются в градусах и отсчитываются против часовой стрелки).
Pie(x,y,r,a1,a2) - рисует сектор окружности, ограниченный дугой (параметры процедуры имеют тот же смысл, что и в процедуре Arc).
Chord(x,y,r,a1,a2) - рисует фигуру (сегмент), ограниченную дугой окружности и отрезком, соединяющим ее концы (параметры процедуры имеют тот же смысл, что и в процедуре Arc).
Создайте на экране следующие фигуры:
  • эллипсы (сжатый по оси ОХ и по оси ОУ);
  • дуги: в половину окружности, четверть окружности;
  • сектора: половина круга, десятая часть круга;
  • сегмент, ограничивающий треть окружности.

понедельник, 11 февраля 2013 г.

Графика в PABC

1. Модуль GraphABC

Графика в Паскале создаются при помощи модуля GraphABC, который подключается в начале программы:
Uses GraphABC;
Система координат выглядит следующим образом:

SetWindowHeight(h); - Устанавливает высоту графического окна
SetWindowWidth(w); - Устанавливает ширину графического окна
ClearWindow; - очищает графическое окно белым цветом.
ClearWindow(color); - очищает графическое окно указанным цветом.

2. Задание цвета 

Стандартные цвета задаются символическими константами:
clBlack – черный
clPurple – фиолетовый
clWhite – белый
clMaroon – темно-красный
clRed – красный
clNavy – темно-синий
clGreen – зеленый
clBrown – коричневый
clBlue – синий
clSkyBlue – голубой
clYellow – желтый
clCream – кремовый
clAqua – бирюзовый
clOlive – оливковый
clFuchsia – сиреневый
clTeal – сине-зеленый
clGray – темно-серый
clLime – ярко-зеленый
clMoneyGreen – цвет зеленых денег
clLtGray – светло-серый
clDkGray – темно-серый
clMedGray – серый
clSilver – серебряный
Цвет также можно задать с помощью палитры RGB для это за место color пишется rgb(r,g,b): где r,b,g - числа от 0 до 255
Задание для самостоятельного решения.
Напишите программу, которая задает окно 200х100 пиксел и закрашивает его по очереди в любые пять цветов. Имейте ввиду, что это закрашивание происходит мгновенно и надо придумать задержку для того, что бы увидеть все пять окрашиваний.

3. Прямоугольник, овал, заливка

Rectangle(x1,y1,x2,y2) - рисует контур прямоугольника со сторонами параллельными сторонам экрана. Точки с координатами (x1, y1) и (x2, y2) определяют диагональные вершины прямоугольника.
Circle(x,y, radius) - рисует окружность с центром в точке с координатами (x,y) и радиусом radius.
FloodFill(x,y,color) - заливает область одного цвета цветом color, начиная с точки (x,y).
SetPenWidth(w) - устанавливает ширину пера, равную w пикселам.
Пример программы, рисующей пирамидку:
Uses GraphABC;
begin
  SetWindowHeight(400);
  SetWindowWidth(500);
  ClearWindow(clSilver );
  SetPenWidth(10);
  Rectangle(100,400,400,300);
  FloodFill(150,350,clRed);
  Rectangle(150,300,350,200);
  FloodFill(170,280,clYellow);
  Rectangle(200,200,300,100);
  FloodFill(220,180,clLime);
end.


понедельник, 4 февраля 2013 г.

Процедуры (продолжение)

1. Выполните без использования компьютера 

1) Выполните алгоритм для следующих входных данных:

  • 2 5 10
  • 5 10 2
  • 10 5 2

Расскажите, что делает данная программа.

program Test1;
var a,b,c,m:real;
procedure fun(x1,x2:real;var max:real);
begin
if x1>x2 then max:=x1 else max:=x2;
end;
begin
readln(a,b,c);
fun(a,b,m);
writeln(m);
fun(m,c,m);
writeln(m);
end.
2) Напишите программу поиска минимального из пяти чисел.

2. Решение задач

Вместе: proc9.
Самостоятельно: proc8proc12; proc15.