Что такое findslide.org?

FindSlide.org - это сайт презентаций, докладов, шаблонов в формате PowerPoint.


Для правообладателей

Обратная связь

Email: Нажмите что бы посмотреть 

Яндекс.Метрика

Презентация на тему Программирование на языке Паскаль. Графика

Содержание

Система координат(0,0)(x,y)XYxy
Программирование  на языке ПаскальТема 7. Графика Система координат(0,0)(x,y)XYxy Управление цветомЦвет и толщина линий, цвет точек:   Pen ( 1, Точки, отрезки и ломаныеPen (1, 0, 255, 0); Line (x1, y1, x2, Фигуры с заливкойPen (1, 0, 0, 255);Brush (1, 255, 255, 0);Rectangle (x1, ТекстTextColor (0, 0, 255);Brush (1, 255, 255, 0);Font (20, 30, 600);MoveTo (x, Пример(200, 50)(100, 100)(300, 200)program qq;begin  Pen(2, 255, 0, 255);  Brush(1, Задания Штриховка(x1, y1)(x2, y2)N линий (N=5)hRectangle (x1, y1, x2, y2);Line( x1+h,  y1, Как менять цвет?(x1, y1)(x2, y2)Brush ( 1, c, c, c );Fill ( Штриховка(x1, y1)(x2, y2)(x3, y2)ah(x3+a, y1)Line( x1+h,  y1, x1+h-a,  y2);Line( x1+2*h, Штриховка(x1, y1)(x2, y2)hxhyyxyLine( x1, y1+hy,  x1+hx,  y1+hy) ;Line( x1, y1+2*hy, Задания Программирование  на языке ПаскальТема 8. Графики функций Построение графиков функцийЗадача: построить график функции y = 3 sin(x) на интервале Преобразование координат(x,y)XYxyМатематическая система координатЭкранная система координат (пиксели)(xэ,yэ)xэyэ(0,0)(0,0)abk – масштаб (длина изображения единичного Программа2πh – шаг изменения xw – длина оси ОХ в пикселяхна экранеоси Как соединить точки?Алгоритм:Если первая точка перейти в точку (xэ,yэ)иначе  отрезок в Задания Программирование  на языке ПаскальТема 9. Процедуры ПроцедурыЗадача: Построить фигуру:Особенность: Три похожие фигуры.общее:  размеры, угол поворотаотличия: координаты, цвет ПроцедурыПроцедура – это вспомогательный алгоритм, который предназначен для выполнения некоторых действий.Применение:выполнение одинаковых ПроцедурыПорядок разработки:выделить одинаковые или похожие действия (три фигуры)найти в них общее (размеры, Программаprogram qq;begin  Pen(1, 255, 0, 255);  Tr(100, 100, 0, 0, ПроцедурыОсобенности:все процедуры расположены выше основной программыв заголовке процедуры перечисляются формальные параметры, они ПроцедурыОсобенности:для каждого формального параметра после двоеточия указывают его типесли однотипные параметры стоят ПроцедурыОсобенности:в процедуре можно объявлять дополнительные локальные переменные, остальные процедуры не имеют к Параметры-переменныеЗадача: составить процедуру, которая меняет местами значения двух переменных.Особенности:надо, чтобы изменения, сделанные Параметры-переменныеПрименение:  таким образом процедура (и функция) может возвращать несколько значений,Запрещенные варианты Задания Программирование  на языке ПаскальТема 10. Рекурсия Рекурсивные объектыРекурсивный объект – это объект, определяемый через один или несколько таких Дерево ПифагораДерево Пифагора из N уровней – это ствол и отходящие от Дерево ПифагораОсобенности:когда остановиться?деревья имеют различный наклонкогда число оставшихся уровней станет равно нулю!(x1, Процедураугол αдлина стволаprocedure Pifagor(x0, y0, a, L: real; Программаprogram qq; procedure Pifagor(x0, y0, a, L: real; Программирование  на языке ПаскальТема 11. Анимация АнимацияАнимация (англ. animation) – оживление изображения на экране.Задача: внутри синего квадрата 400 Как Как выйти из цикла при нажатии Esc?program qq;var stop: boolean; Процедура (рисование и стирание)procedure Draw(x, y: integer; flag: boolean);begin if flag then Полная программаprogram qq;var x, y, k, code, i: integer;  stop: boolean; Управление клавишамиЗадача: жёлтый квадрат внутри синего квадрата управляется клавишами-стрелками. Коды клавиш:			влево – Программаprogram qq;var x, y, k, code, i: integer;  stop: boolean;begin ... Как убрать мигание?Проблема: даже если не нажата никакая клавиша, квадрат перерисовывается через Программаprogram qq;var x, y, k, code, i: integer;  stop: boolean;begin ... ВращениеЗадача: изобразить модель вращения Земли вокруг Солнца.Проблема: движение по окружности, как изменять Процедураprocedure Draw(x, y: integer; flag: boolean);const r = 10;begin if flag then Константы и переменныеprogram qq;const rSun = 60;  { радиус Солнца} Основная программаprogram qq;...begin Brush(1, 0, 0, 0); Fill(1,1); Brush(1, 255, 255, 0);
Слайды презентации

Слайд 2
Система координат

(0,0)
(x,y)
X
Y

x
y

Система координат(0,0)(x,y)XYxy

Слайд 3
Управление цветом
Цвет и толщина линий, цвет точек:

Управление цветомЦвет и толщина линий, цвет точек:  Pen ( 1,

Pen ( 1, 255, 0, 0 );
Цвет и

стиль заливки:
Brush ( 1, 0, 255, 0 );
Цвет текста:
TextColor ( 0, 0, 255 );

толщина линии

R(red)
0..255

G(green)
0..255

B(blue)
0..255

0 – выключить
1 - включить

R

G

B

R

G

B


Слайд 4
Точки, отрезки и ломаные
Pen (1, 0, 255, 0);

Точки, отрезки и ломаныеPen (1, 0, 255, 0); Line (x1, y1,

Line (x1, y1, x2, y2);
Pen (1, 0, 0, 255);
Point

(x, y);

Pen (1, 255, 0, 0); MoveTo (x1, y1); LineTo (x2, y2);
LineTo (x3, y3);
LineTo (x4, y4);
LineTo (x5, y5);


Слайд 5
Фигуры с заливкой
Pen (1, 0, 0, 255);
Brush (1,

Фигуры с заливкойPen (1, 0, 0, 255);Brush (1, 255, 255, 0);Rectangle

255, 255, 0);
Rectangle (x1, y1, x2, y2);
Pen (1, 255,

0, 0);
Brush (1, 0, 255, 0);
Ellipse (x1, y1, x2, y2);

Brush (1, 100, 200, 255);
Fill (x, y);


Слайд 6
Текст
TextColor (0, 0, 255);
Brush (1, 255, 255, 0);
Font

ТекстTextColor (0, 0, 255);Brush (1, 255, 255, 0);Font (20, 30, 600);MoveTo

(20, 30, 600);
MoveTo (x, y);
writeln ('Привет!');
Привет!
(x, y)

размер
10 пикселей
угол
поворота
насыщенность:
400

– нормальный
600 – жирный


30о


Слайд 7
Пример


(200, 50)
(100, 100)
(300, 200)



program qq;
begin
Pen(2, 255,

Пример(200, 50)(100, 100)(300, 200)program qq;begin Pen(2, 255, 0, 255); Brush(1, 0,

0, 255);
Brush(1, 0, 0, 255);
Rectangle(100,

100, 300, 200);
MoveTo(100, 100);
LineTo(200, 50);
LineTo(300, 100);
Brush(1, 255, 255, 0);
Fill(200, 75);
Pen(2, 255, 255, 255);
Brush(1, 0, 255, 0);
Ellipse(150, 100, 250, 200);
end.



Слайд 8
Задания
"4": "Лягушка"







"5": "Корона"






Задания

Слайд 9
Штриховка
(x1, y1)
(x2, y2)



N линий (N=5)
h



Rectangle (x1, y1, x2,

Штриховка(x1, y1)(x2, y2)N линий (N=5)hRectangle (x1, y1, x2, y2);Line( x1+h, y1,

y2);
Line( x1+h, y1, x1+h, y2);
Line( x1+2*h, y1,

x1+2*h, y2);
Line( x1+3*h, y1, x1+3*h, y2);
...

h := (x2 – x1) / (N + 1);
Rectangle (x1, y1, x2, y2);
x := x1 + h;
for i:=1 to N do begin
Line( round(x), y1, round(x), y2);
x := x + h;
end;

var x, h: real;

x

округление до ближайшего целого

x


Слайд 10

Как менять цвет?
(x1, y1)
(x2, y2)


Brush ( 1, c,

Как менять цвет?(x1, y1)(x2, y2)Brush ( 1, c, c, c );Fill

c, c );
Fill ( ???, ??? );
серый: R =

G = B

Шаг изменения c:

x

(x-1, y1+1)




var c, hc: integer;


hc := 255 div (N + 1);
c := 0;
for i:=1 to N+1 do begin
Line (round(x), y1, round(x), y2);
Brush (1, c, c, c);
Fill (round(x)-1, y1+1);
x := x + h; c := c + hc;
end;


Слайд 11
Штриховка
(x1, y1)

(x2, y2)
(x3, y2)



a
h
(x3+a, y1)



Line( x1+h, y1,

Штриховка(x1, y1)(x2, y2)(x3, y2)ah(x3+a, y1)Line( x1+h, y1, x1+h-a, y2);Line( x1+2*h, y1,

x1+h-a, y2);
Line( x1+2*h, y1, x1+2*h-a, y2);
Line( x1+3*h, y1,

x1+3*h-a, y2);
...

h := (x3 – x2) / (N + 1);
a := x2 – x1;
x := x1 + h;
for i:=1 to N do begin
Line( round(x), y1, round(x-a), y2);
x := x + h;
end;

x

x-a


Слайд 12
Штриховка

(x1, y1)
(x2, y2)


hx
hy



y

x
y
Line( x1, y1+hy, x1+hx,

Штриховка(x1, y1)(x2, y2)hxhyyxyLine( x1, y1+hy, x1+hx, y1+hy) ;Line( x1, y1+2*hy, x1+2*hx,

y1+hy) ;
Line( x1, y1+2*hy, x1+2*hx, y1+2*hy);
Line( x1, y1+3*hy, x1+3*hx,

y1+3*hy);
...

hx := (x2 – x1) / (N + 1);
hy := (y2 – y1) / (N + 1);
x := x1 + hx; y := y1 + hy;
for i:=1 to N do begin
Line( x1, round(y), round(x), round(y));
x := x + hx; y := y + hy;
end;


Слайд 13
Задания
"4": Ввести с клавиатуры число линий штриховки и

Задания

построить фигуру, залив все области разным цветом.







"5":

Ввести с клавиатуры число окружностей и построить фигуру, залив все области разным цветом.

Слайд 14 Программирование на языке Паскаль
Тема 8. Графики функций

Программирование на языке ПаскальТема 8. Графики функций

Слайд 15
Построение графиков функций
Задача: построить график функции y =

Построение графиков функцийЗадача: построить график функции y = 3 sin(x) на

3 sin(x) на интервале от 0 до 2π.
Анализ:
максимальное

значение ymax = 3 при x = π/2
минимальное значение ymin = -3 при x = 3π/2
Проблема: функция задана в математической системе координат, строить надо на экране, указывая координаты в пикселях.

Слайд 16
Преобразование координат
(x,y)

X
Y
x
y
Математическая
система координат
Экранная система координат (пиксели)

(xэ,yэ)



(0,0)
(0,0)
a
b
k –

Преобразование координат(x,y)XYxyМатематическая система координатЭкранная система координат (пиксели)(xэ,yэ)xэyэ(0,0)(0,0)abk – масштаб (длина изображения

масштаб (длина изображения единичного отрезка на экране)
xэ = a

+ kx
yэ = b - ky

Слайд 17
Программа


h – шаг изменения x
w – длина оси

Программа2πh – шаг изменения xw – длина оси ОХ в пикселяхна

ОХ в пикселях
на экране
оси координат
цикл построения графика


program qq;
const a

= 50; b = 200; k = 50;
xmin = 0; xmax = 6.2832;
var x, y, h: real;
xe, ye, w: integer;
begin
w := round((xmax - xmin)*k);
Line(a-10, b, a+w, b);
Line(a, 0, a, 2*b);
x := xmin; h := 0.05;
while x <= xmax do begin
y := 3*sin(x);
xe := a + round(k*x);
ye := b - round(k*y);
Point (xe, ye);
x := x + h;
end;
end.

Слайд 18
Как соединить точки?
Алгоритм:
Если первая точка
перейти в точку

Как соединить точки?Алгоритм:Если первая точка перейти в точку (xэ,yэ)иначе отрезок в

(xэ,yэ)
иначе
отрезок в точку (xэ,yэ)
Программа:


начальное значение
выбор варианта действий

логическая

переменная

var first: boolean;
...
begin
...
first := True;
while x <= xmax do begin
...
if first then begin
MoveTo(xe, ye);
first := False;
end
else LineTo(xe, ye);
...
end;
end.


Слайд 19
Задания
"4": Построить график функции y = x2 на

Задания

интервале [-3,3].







"5": Построить график функции (эллипс)



Слайд 20 Программирование на языке Паскаль
Тема 9. Процедуры

Программирование на языке ПаскальТема 9. Процедуры

Слайд 21
Процедуры
Задача: Построить фигуру:
Особенность: Три похожие фигуры.
общее: размеры,

ПроцедурыЗадача: Построить фигуру:Особенность: Три похожие фигуры.общее: размеры, угол поворотаотличия: координаты, цвет

угол поворота
отличия: координаты, цвет


Слайд 22
Процедуры
Процедура – это вспомогательный алгоритм, который предназначен для

ПроцедурыПроцедура – это вспомогательный алгоритм, который предназначен для выполнения некоторых действий.Применение:выполнение

выполнения некоторых действий.
Применение:
выполнение одинаковых действий в разных местах программы
разбивка

программы (или другой процедуры) на подзадачи для лучшего восприятия

Слайд 23
Процедуры
Порядок разработки:
выделить одинаковые или похожие действия (три фигуры)
найти

ПроцедурыПорядок разработки:выделить одинаковые или похожие действия (три фигуры)найти в них общее

в них общее (размеры, форма, угол поворота) и отличия

(координаты, цвет)
отличия записать в виде неизвестных переменных, они будут параметрами процедуры

(x+100, y)

(x, y-60)




procedure Tr( x, y, r, g, b: integer);
begin
MoveTo(x, y);
LineTo(x, y-60);
LineTo(x+100, y);
LineTo(x, y);
Brush(1, r, g, b);
Fill(x+20, y-20);
end;

заголовок


тело процедуры

координаты

цвет

параметры


Слайд 24 Программа
program qq;




begin
Pen(1, 255, 0, 255);

Программаprogram qq;begin Pen(1, 255, 0, 255); Tr(100, 100, 0, 0, 255);

Tr(100, 100, 0, 0, 255);
Tr(200, 100, 0,

255, 0);
Tr(200, 160, 255, 0, 0);
end.

(100,100)

100

60

процедура

фактические параметры

вызовы процедуры

procedure Tr( x, y, r, g, b: integer);
begin
...
end;

формальные параметры


Слайд 25
Процедуры
Особенности:
все процедуры расположены выше основной программы
в заголовке процедуры

ПроцедурыОсобенности:все процедуры расположены выше основной программыв заголовке процедуры перечисляются формальные параметры,

перечисляются формальные параметры, они обозначаются именами, поскольку могут меняться
при

вызове процедуры в скобках указывают фактические параметры (числа или арифметические выражения) в том же порядке

procedure Tr( x, y, r, g, b: integer);

Tr (200, 100, 0, 255, 0);

x

y

r

g

b


Слайд 26
Процедуры
Особенности:
для каждого формального параметра после двоеточия указывают его

ПроцедурыОсобенности:для каждого формального параметра после двоеточия указывают его типесли однотипные параметры

тип
если однотипные параметры стоят рядом, их перечисляют через запятую
внутри

процедуры параметры используются так же, как и переменные

procedure A (x: real; y: integer; z: real);

procedure A (x, z: real; y, k, l: integer);


Слайд 27
Процедуры
Особенности:
в процедуре можно объявлять дополнительные локальные переменные, остальные

ПроцедурыОсобенности:в процедуре можно объявлять дополнительные локальные переменные, остальные процедуры не имеют

процедуры не имеют к ним доступа


program qq;
procedure A(x,

y: integer);
var a, b: real;
begin
a := (x + y)/6;
...
end;
begin
...
end.


локальные переменные


Слайд 28 Параметры-переменные
Задача: составить процедуру, которая меняет местами значения двух

Параметры-переменныеЗадача: составить процедуру, которая меняет местами значения двух переменных.Особенности:надо, чтобы изменения,

переменных.
Особенности:
надо, чтобы изменения, сделанные в процедуре, стали известны вызывающей

программе

program qq;
var x, y: integer;





begin
x := 1; y := 2;
Exchange ( x, y );
writeln ( ’x = ’, x, ’ y = ’, y );
end;

procedure Exchange ( a, b: integer );
var c: integer;
begin
c := a; a := b; b := c;
end;


эта процедура работает с копиями параметров

x = 1 y = 2


Слайд 29 Параметры-переменные
Применение: таким образом процедура (и функция) может возвращать

Параметры-переменныеПрименение: таким образом процедура (и функция) может возвращать несколько значений,Запрещенные варианты

несколько значений,
Запрещенные варианты вызова
Exchange ( 2, 3 );

{ числа }
Exchange ( x+z, y+2 ); { выражения }

procedure Exchange ( a, b: integer );
var c: integer;
begin
c := a; a := b; b := c;
end;

var

параметры могут изменяться






Слайд 30
Задания
"4": Используя процедуры, построить фигуру.







"5": Используя

Задания

процедуры, построить фигуру.


Слайд 31 Программирование на языке Паскаль
Тема 10. Рекурсия

Программирование на языке ПаскальТема 10. Рекурсия

Слайд 32
Рекурсивные объекты
Рекурсивный объект – это объект, определяемый через

Рекурсивные объектыРекурсивный объект – это объект, определяемый через один или несколько

один или несколько таких же объектов.
У попа была

собака, он ее любил.
Она съела кусок мяса, он ее убил.
В ямку закопал, надпись написал:

Сказка о попе и собаке

Примеры:

Сказка о попе и собаке:

Факториал:


если

если

Рисунок с рекурсией:


Слайд 33
Дерево Пифагора
Дерево Пифагора из N уровней – это

Дерево ПифагораДерево Пифагора из N уровней – это ствол и отходящие

ствол и отходящие от него симметрично два дерева Пифагора

из N-1 уровней, такие что длина их стволов в 2 раза меньше и угол между ними равен 90o.


6 уровней:




Слайд 34
Дерево Пифагора
Особенности:
когда остановиться?
деревья имеют различный наклон
когда число оставшихся

Дерево ПифагораОсобенности:когда остановиться?деревья имеют различный наклонкогда число оставшихся уровней станет равно

уровней станет равно нулю!

(x1, y1)
(x0, y0)





α
α+45o

α-45o
L
x1 = x0 +

L·cos(α)
y1 = y0 – L·sin(α)

наклон "дочерних" деревьев

α + π/4
α – π/4


Слайд 35 Процедура

угол α
длина ствола

procedure Pifagor(x0, y0, a, L: real;

Процедураугол αдлина стволаprocedure Pifagor(x0, y0, a, L: real;


N: integer);
const k = 0.6; { изменение длины }
var x1, y1: real; { локальные переменные }
begin
if N > 0 then begin
x1 := x0 + L*cos(a);
y1 := y0 - L*sin(a);
Line (round(x0), round(y0),
round(x1), round(y1));
Pifagor (x1, y1, a+pi/4, L*k, N-1);
Pifagor (x1, y1, a-pi/4, L*k, N-1);
end;
end;

рекурсивные вызовы

закончить, если N=0

Рекурсивной называется процедура, вызывающая сама себя.


Слайд 36
Программа

program qq;
procedure Pifagor(x0, y0, a, L: real;

Программаprogram qq; procedure Pifagor(x0, y0, a, L: real;


N: integer);
...
end;
begin
Pifagor (250, 400, pi/2, 150, 8);
end;

угол α

длина ствола

число уровней

x0

y0

Pifagor (250, 400, 2*pi/3, 150, 8);


Слайд 37 "4": Используя рекурсивную процедуру, построить фигуру:







"5":

Используя рекурсивную процедуру, построить фигуру:

Задания


Слайд 38 Программирование на языке Паскаль
Тема 11. Анимация

Программирование на языке ПаскальТема 11. Анимация

Слайд 39
Анимация
Анимация (англ. animation) – оживление изображения на экране.
Задача:

АнимацияАнимация (англ. animation) – оживление изображения на экране.Задача: внутри синего квадрата

внутри синего квадрата 400 на 400 пикселей слева направо

двигается желтый квадрат 20 на 20 пикселей. Программа останавливается, если нажата клавиша Esc или квадрат дошел до границы синей области.

Проблема: как изобразить перемещение объекта на экране?
Привязка: состояние объекта задается координатами (x,y)
Принцип анимации:
рисуем объект в точке (x,y)
задержка на несколько миллисекунд
стираем объект
изменяем координаты (x,y)
переходим к шагу 1


Слайд 40
Как "поймать" нажатие клавиши?
Событие – это изменение в


Слайд 41

Как выйти из цикла при нажатии Esc?

program qq;
var

Как выйти из цикла при нажатии Esc?program qq;var stop: boolean;

stop: boolean;
k,code,i: integer;
begin
stop :=

False;
repeat
if IsEvent then begin
Event(k, code, i);
if (k = 1) and (code = 27) then
stop := True;
end;
...
until stop;
end;

если что-то произошло...

что произошло?

если нажата клавиша с кодом 27 (Esc), то стоп

True, если надо остановиться

запуск цикла


Слайд 42

Процедура (рисование и стирание)
procedure Draw(x, y: integer; flag:

Процедура (рисование и стирание)procedure Draw(x, y: integer; flag: boolean);begin if flag

boolean);
begin
if flag then
Brush(1, 255, 255, 0)


else
Brush(1, 0, 0, 255);
Rectangle(x, y, x+20, y+20);
end;


(x, y)



(x+20, y+20)

Идеи
одна процедура рисует и стирает
стереть = нарисовать цветом фона
границу квадрата отключить (в основной программе)

рисовать (True) или нет (False)?

рисуем: цвет кисти – желтый

стираем: цвет кисти – синий

только заливка!


Слайд 43

Полная программа



program qq;
var x, y, k, code, i:

Полная программаprogram qq;var x, y, k, code, i: integer; stop: boolean;

integer;
stop: boolean;
procedure Draw(x,y: integer; flag: Boolean);

begin
...
end;
begin
Brush(1, 0, 0, 255);
Rectangle(10, 10, 400, 400);
Pen(0, 0, 0, 255);
x := 10; y := 200; stop := false;
repeat
if IsEvent then begin
...
end;
Draw(x, y, True);
Delay(10);
Draw(x, y, False);
x := x + 1;
if x >= 400-20 then stop := true;
until stop;
end.

процедура

начальные условия

выход по клавише Esc

выход при касании границы

синий фон

ждем 10 мс

отключить границу



Слайд 44 "4": Два квадрата двигаются в противоположном направлении:






"5": Два квадрата двигаются в противоположном направлении и отталкиваются

от стенок синего квадрата:

Задания














Слайд 45
Управление клавишами
Задача: жёлтый квадрат внутри синего квадрата управляется

Управление клавишамиЗадача: жёлтый квадрат внутри синего квадрата управляется клавишами-стрелками. Коды клавиш:			влево

клавишами-стрелками. Коды клавиш:
влево – 37 вверх – 38 Esc – 27
вправо

– 39 вниз – 40
Проблема: как изменять направление движения?
Решение:

if {было событие} then begin
if {нажата клавиша} then begin
{получить код клавиши - code}
if code = 37 then x := x – 1;
if code = 38 then y := y – 1;
if code = 39 then x := x + 1;
if code = 40 then y := y + 1;
if code = 27 then stop := True;
end;
end;

IsEvent

Event ( k, code, i);
if k = 1 then begin

case code of
37: x := x – 1; 38: y := y – 1;
39: x := x + 1; 40: y := y + 1;
27: stop := True;
end;

если было нажатие на клавишу, …


Слайд 46 Программа
program qq;
var x, y, k, code, i: integer;

Программаprogram qq;var x, y, k, code, i: integer; stop: boolean;begin ...

stop: boolean;



begin
...
repeat
Draw(x, y, True);

Delay(20);
Draw(x, y, False);



until stop;
end.

procedure Draw(x,y: integer; flag: Boolean);
begin
...
end;


if IsEvent then begin
...
end;

процедура

основной цикл

обработка событий


Слайд 47 Как убрать мигание?
Проблема: даже если не нажата никакая

Как убрать мигание?Проблема: даже если не нажата никакая клавиша, квадрат перерисовывается

клавиша, квадрат перерисовывается через каждые 20 мс (мигание!)
Что хочется:

не перерисовать квадрат, если не было никакого события
Решение: нарисовать квадрат и ждать события
Новая проблема: как ждать события?
Решение новой проблемы: пустой цикл "пока не случилось событие, ничего не делай":

while not IsEvent do;


Слайд 48 Программа
program qq;
var x, y, k, code, i: integer;

Программаprogram qq;var x, y, k, code, i: integer; stop: boolean;begin ...

stop: boolean;




begin
...
repeat
Draw(x, y, True);

while not IsEvent do;



until stop;
end.

procedure Draw(x,y: integer; flag: Boolean);
begin
...
end;


Draw(x, y, False);
Event(k, code, i);
...

while not IsEvent do;

процедура

рисуем квадрат

ждем события

только теперь стираем


Слайд 49 "4": Квадрат двигается при нажатии стрелок, однако не

может выйти за границы синего квадрата:




"5": Квадрат

непрерывно двигается, при нажатии стрелок меняет направление и отталкивается от стенок синего квадрата:

Задания
















Слайд 50
Вращение
Задача: изобразить модель вращения Земли вокруг Солнца.
Проблема: движение

ВращениеЗадача: изобразить модель вращения Земли вокруг Солнца.Проблема: движение по окружности, как

по окружности, как изменять координаты?
Решение: использовать в качестве независимой

переменной (менять в цикле) угол поворота α



(x0, y0)



α

L

(x, y)

x = x0 + L·cos(α)
y = y0 – L·sin(α)



Слайд 51 Процедура
procedure Draw(x, y: integer; flag: boolean);
const r =

Процедураprocedure Draw(x, y: integer; flag: boolean);const r = 10;begin if flag

10;
begin
if flag then
Brush(1, 100, 100, 255)


else
Brush(1, 0, 0, 0);
Ellipse(x-r, y-r, x+r, y+r);
end;

рисовать (True) или нет (False)?

рисуем: цвет кисти – голубой

стираем: цвет кисти – черный

только заливка!

радиус Земли



(x-r, y-r)





(x,y)

(x+r, y+r)


Слайд 52 Константы и переменные
program qq;
const rSun = 60;

Константы и переменныеprogram qq;const rSun = 60; { радиус Солнца}

{ радиус Солнца}
L = 150;

{ радиус орбиты Земли }
x0 = 200; { координаты центра Солнца}
y0 = 200;
var x, y, { координаты Земли }
k, code, i: integer; { для Event }
a, ha: real; { угол поворота, шаг }
stop: boolean; { признак остановки программы }




begin
...
end.

procedure Draw(x, y: integer; flag: Boolean);
begin
...
end;


Слайд 53 Основная программа
program qq;
...
begin
Brush(1, 0, 0, 0); Fill(1,1);

Основная программаprogram qq;...begin Brush(1, 0, 0, 0); Fill(1,1); Brush(1, 255, 255,

Brush(1, 255, 255, 0);
Ellipse(x0-rSun, y0-rSun, x0+rSun, y0+rSun);
a

:= 0; ha := 1*pi/180; { начальный угол, шаг 1o за 100 мс}
stop := false;
Pen(0,0,0,0); { отключаем контуры }
repeat
x := round(x0 + L*cos(a));
y := round(y0 - L*sin(a));
Draw(x, y, True);
Delay(100);
Draw(x, y, False);




a := a + ha;
until stop;
end.


залить фон черным

рисуем Солнце

новые координаты

поворот на ha

ждем 100 мс

if IsEvent then begin
Event(k, code, i);
if (k = 1) and (code = 27) then stop := true;
end;


  • Имя файла: programmirovanie-na-yazyke-paskal-grafika.pptx
  • Количество просмотров: 143
  • Количество скачиваний: 0