1 Программирование на языке Паскаль Графика. 2 Система координат (0,0) (x,y)(x,y) X Y x y.

Презентация:



Advertisements
Похожие презентации
1 Программирование на языке Паскаль Тема 7. Графика © К.Ю. Поляков,
Advertisements

1 Программирование на языке Паскаль Тема 8. Графики функций © К.Ю. Поляков,
1 Программирование на языке Паскаль Тема 7. Графика.
К. Поляков, Программирование на алгоритмическом языке Тема 7. Алгоритмы-функции.
Исследование физических моделей. Движение тела, брошенного под углом к горизонту. Бросание мяча в площадку 1.
Урок 1 Знакомство с графическим модулем и процедурами, устанавливающими текущий цвет рисунка, тип закраски и ее цвет, рисующими прямоугольник и трехмерный.
Урок 1 Знакомство с графическим модулем и процедурами, устанавливающими текущий цвет рисунка, тип закраски и ее цвет, рисующими прямоугольник и трехмерный.
Построение точки и отрезков прямых. Для построения точки служит процедура PutPixel(X,Y, цвет) Для построения точки служит процедура PutPixel(X,Y, цвет)
Модуль GraphМодуль GraphИнициализация и завершение гpафического режима InitGraph (driver, mode : integer; path : string); При driver:=detect включается.
Задание графического режима Линия Прямоугольник Окружность Эллипс Дуга выход Тест 2Тест 1 содержание.
ГРАФИЧЕСКИЕ ВОЗМОЖНОСТИ Язык программирования Паскаль.
Циклы в языке программирования Pascal
Построение графиков функций на PascalABC
1 Графика в Pascal Модуль Graph. 2 Подключение дополнительных библиотек Для работы в графическом режиме необходимо подключение модуля Graph. Первой инструкцией.
ГРАФИЧЕСКИЙ РЕЖИМ Turbo Pascal 7.0. Графические операции Система координат Инициализация Изображение точек Изображение линий Закрашенные фигуры Вывод.
К. Поляков, Программирование на алгоритмическом языке Тема 5. Графика.
Рекурсивное программирование Рекурсия – это метод, сводящий общую задачу к некоторым задачам более узкого, простого типа Рекурсивный алгоритм – это алгоритм,
1 Программирование на языке Паскаль Процедуры. 2 Подпрограммы Задача: Построить фигуру: Особенность: Три похожие фигуры. общее: размеры, угол поворота.
1 Программирование на языке Паскаль Процедуры. 2 Задача: Построить фигуру: Особенность: Три похожие фигуры. общее: размеры, угол поворота отличия: координаты,
1 Программирование на языке Паскаль Тема 2. Максимальный элемент массива.
Транксрипт:

1 Программирование на языке Паскаль Графика

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

3 Управление цветом Цвет и толщина линий, цвет точек: Pen ( 1, 255, 0, 0 ); Цвет и стиль заливки: Brush ( 1, 0, 255, 0 ); Цвет текста: TextColor ( 0, 0, 255 ); толщина линии R(red) R(red) G(green) G(green) B(blue) B(blue) – выключить 1 - включить 0 – выключить 1 - включить R R G G B B R R G G B B

4 Точки, отрезки и ломаные (x 1, y 1 ) (x 2, y 2 ) Pen (1, 0, 255, 0); Line (x1, y1, x2, y2); (x, y) Pen (1, 0, 0, 255); Point (x, y); Pen (1, 0, 0, 255); Point (x, y); (x 1, y 1 ) (x 2, y 2 ) (x 3, y 3 ) (x 4, y 4 ) (x 5, y 5 ) Pen (1, 255, 0, 0); MoveTo (x1, y1); LineTo (x2, y2); LineTo (x3, y3); LineTo (x4, y4); LineTo (x5, y5); Pen (1, 255, 0, 0); MoveTo (x1, y1); LineTo (x2, y2); LineTo (x3, y3); LineTo (x4, y4); LineTo (x5, y5);

5 Фигуры с заливкой (x 1, y 1 ) (x 2, y 2 ) Pen (1, 0, 0, 255); Brush (1, 255, 255, 0); Rectangle (x1, y1, x2, y2); Pen (1, 0, 0, 255); Brush (1, 255, 255, 0); Rectangle (x1, y1, x2, y2); (x 1, y 1 ) (x 2, y 2 ) Pen (1, 255, 0, 0); Brush (1, 0, 255, 0); Ellipse (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); Brush (1, 100, 200, 255); Fill (x, y); (x, y) Как отменить заливку? ?

6 Текст TextColor (0, 0, 255); Brush (1, 255, 255, 0); Font (20, 30, 600); MoveTo (x, y); writeln ('Привет!'); TextColor (0, 0, 255); Brush (1, 255, 255, 0); Font (20, 30, 600); MoveTo (x, y); writeln ('Привет!'); Привет! (x, y) размер 10 пикселей размер 10 пикселей угол поворота угол поворота насыщенность: 400 – нормальный 600 – жирный насыщенность: 400 – нормальный 600 – жирный 30 о

7 Пример (200, 50) (100, 100) (300, 200) program qq; begin Pen(2, 255, 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. program qq; begin Pen(2, 255, 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 Штриховка (x 1, y 1 ) (x 2, y 2 ) N линий (N=5) h Rectangle (x1, y1, x2, 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; 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 округление до ближайшего целого x x

10 Как менять цвет? (x 1, y 1 ) (x 2, y 2 ) Brush ( 1, c, c, c ); Fill ( ???, ??? ); Brush ( 1, c, c, c ); Fill ( ???, ??? ); серый: R = G = B Шаг изменения c: x (x-1, y 1 +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 Штриховка (x 1, y 1 ) (x 2, y 2 ) (x 3, y 2 ) a h (x 3 +a, y 1 ) Line( x1+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 := x1 – x2; x := x1 + h; for i:=1 to N do begin Line( round(x), y1, round(x-a), y2); x := x + h; end; h := (x3 – x2) / (N + 1); a := x1 – x2; x := x1 + h; for i:=1 to N do begin Line( round(x), y1, round(x-a), y2); x := x + h; end; x x x-a

12 Штриховка (x 1, y 1 ) (x 2, y 2 ) hxhx hyhy y y x x y y Line( x1, y1+hy, x1+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; 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 Program primer ; Uses graph ; Var D, m : integer : {переменные для установки драйвера, режима} Begin D:= detect; InirGraph(d,m, путь к драйверу ); If GrapfResult =0 then {если инициализация прошла успешно} begin closeGraph ; end else writeln (произошла ошибка при инициализации графики); end. Пример заготовки к графическому режиму

15 program graphic; uses graph; var driver, mode, errorcode : integer; xm,ym,i,j : integer; pi,pi300,x1,y1,x2,y2, sc : real; st1,st2,st3 : string; function f(x:real) : real; begin f:=sin(x)+sin(2*x)+sin(3*x)-1-cos(x)-cos(2*x);{ функция для построения} end; {графика} begin st1:='x';st2:='y'; st3:=' Press ENTER'; sc:=50; driver:=9; {egavga} mode:=2; {640х480 пикселей} initgraph(driver,mode,'d:\bp\bgi'); {инициализация графического режима } errorcode:=graphresult; if errorcodegrok then {ошибка } begin writeln('Error init Graph'); closegraph; halt; end; xm:=getmaxx div 2; ym:=getmaxy div 2; { xm=320;ym=240;центр экрана} line(xm,20,xm,460);{ось y} line(20,ym,620,ym);{ ось x} outtextxy(630,ym,st1); {маркировка оси х} outtextxy(xm,10,st2); {маркировка оси у} pi:= ; pi300:=pi/300; x1:=-pi; for i:=0 to 24 do {разметка оси х вертикальными черточками} begin line(xm+round(80*x1),230,xm+round(80*x1),250); x1:=x1+pi300*25; end; x1:=-pi; {собственно построение графика отрезками прямых} while x1

16 Program listik; uses graphabc,crt; var x,y,a,b,x0,y0,mx,my,i,k:integer; h,xt,yt,y2:real; function f(x:real):real; begin result:=0.5*sqr(x)+4*x-3; end; function f1(x:real):real; begin result:=(7*power(sin(sqr(x)),3))/(3*sqr(cos(power(x,3)))+1); end; begin FloodFill(10,10,clsilver); x0:=639 div 2; y0:=479 div 2; mx:=5; my:=5; line(639 div 2,0,639 div 2,479); line(0,479 div 2, 639,479 div 2); for i:=1 to 64 do line(10*i,479 div 2-5,10*i,479 div 2+5); for k:=1 to 48 do line(639 div 2-5,10*k,639 div 2+5,10*k); xt:=-15; h:=0.1; repeat yt:=f(xt); x:=x0+round(xt*mx); y:=y0-round(yt*my); setpixel(round(x),round(y),clblack) ; xt:=xt+h; until (xt>5) or (keypressed); {xt:=-20; h:=0.0031; repeat yt:=f1(xt); x:=x0+round(xt*mx); y:=y0-round(yt*my); setpixel(round(x),round(y),clblack) ; xt:=xt+h; until (xt>20) or (keypressed);} xt:=-7; h:=0.0031; repeat yt:=f1(xt); x:=x0+round(xt*mx); y:=y0-round(yt*my); setpixel(round(x),round(y),clblack) ; xt:=xt+h; until (xt>7) or (keypressed); end.

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

18 Построение графиков функций Задача: построить график функции y = 3 sin(x ) на интервале от 0 до 2π. Анализ: максимальное значение y max = 3 при x = π/2 минимальное значение y min = -3 при x = 3 π/2 Проблема: функция задана в математической системе координат, строить надо на экране, указывая координаты в пикселях.

19 Преобразование координат (x,y)(x,y) X Y x y Математическая система координат Экранная система координат (пиксели) (xэ,yэ)(xэ,yэ) xэxэ yэyэ (0,0)(0,0) (0,0)(0,0) a b k – масштаб (длина изображения единичного отрезка на экране) x э = a + kx y э = b - ky x э = a + kx y э = b - ky

20 Программа 2π2π 2π2π h – шаг изменения x w – длина оси ОХ в пикселях на экране оси координат цикл построения графика program qq; const a = 50; b = 200; k = 50; xmin = 0; xmax = ; 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

21 Как соединить точки? Алгоритм: Если первая точка перейти в точку (x э,y э ) иначе отрезок в точку (x э,y э ) Если первая точка перейти в точку (x э,y э ) иначе отрезок в точку (x э,y э ) Программа: начальное значение выбор варианта действий логическая переменная var first: boolean;... begin... first := True; while x

22 Задания "4": Построить график функции y = x 2 на интервале [-3,3]. "5": Построить график функции (эллипс)