Лабораторная работа №20.Графика




Для рисования статичных рисунков используется компонент PaintBox (панель System). Этот компонент размещается на форме в виде прозрачного пунктирного квадрата, и в его пределах можно рисовать. Рисование выполняется обращением к свойству Canvas (графическая канва) этого компонента: PaintBox1.Canvas. У него в свою очередь есть свойство Pixels (PaintBox1.Canvas.Pixels), которое представляет собой матрицу, двумерный массив заданного размера - поточечный образ канвы, каждый элемент - отдельная точка. В Pixels[] отсчет точек (пикселов экрана) начинается с 0.

Координаты x, y отсчитываются от верхнего левого угла, то есть он считается точкой с координатой (0, 0), увеличение по оси x идет слева направо, а по оси y - сверху вниз. Для конкретной точки указывается цвет. Функция RGB() формирует цвет комбинацией интенсивности красного, зеленого и синего (интенсивность задается числом от 0 до 255). Например, черный - RGB(0,0,0), красный - rgb(255,0,0), синий - rgb(0,0,255), белый -rgb(255,255,255).

Цель работы - создать программу, выполняющую следующие действия:

1. Разместить на форме компонент PaintBox.

2. Заполнить доступную канву 300 красными точками в случайных позициях по нажатиям на некоторую кнопку.

3. Для выхода из программы необходимо щелкнуть мышью на закрывающей кнопке в строке заголовка.

4. Записать код в обработчике нажатия.

Рис. 20.1

procedure TForm1.Button1Click(Sender: TObject); var i,x,y: Integer;

begin randomize;

for i:= 1 to 300 do begin

x:= random(100); y:= random(100);

PaintBox1.Canvas.Pixels[x,y]:= RGB(255,0,0);

end end;

5. Изменить RGB(255,0,0) на RGB(random(255),random(255),random(255)).

Рис. 20.2

6. Заполнить фон черным цветом перед началом выполнения программы с помощью метода канвы ИПКей. Метод вызывается с указанием прямоугольной области заливки цветом: ЕП^ест.^ест.(0, 0, 100, 100))// координаты верхнего левого и правого нижнего углов Вложенное слово Яей формирует данное типа "прямоугольник". Перед вызовом ПИЯей надо указать цвет заливки: PaintBox1.Canvas.Brush.Color:= 1ЮВ (0,0,0);

Рис. 18.3

procedure TForm1.Button1Click(Sender: TObject); var i,x,y: Integer;

begin

PaintBox1.Canvas.Brush.Color:= RGB(0,0,0);

PaintBox1.Canvas.FillRect(Rect(0,0,100,100));

for i:= 1 to 300 do begin x:= random(100); y:= random(100);

PaintBox1.Canvas.Pixels[x,y]:= RGB(random(255),random(255),random(255));

end end;

7. Заполнить канву случайными разноцветными линиями разной толщины. Линия рисуется с помощью методов (сначала задается начальная точка, потом конечная):

PaintBox1.Canvas.MoveTo(10,10);

PaintBox1.Canvas.LineTo(50,50);

Цвет линии и толщина задаются свойством канвы Pen (карандаш). Pen.Color - цвет карандаша), Pen.Width - толщина линии в пикселах (по умолчанию - 1).

Рис. 18.4.

for i:= 1 to 300 do begin PaintBox1.Canvas.Pen.Color:= RGB(random(255),random(255),random(255)); PaintBox1.Canvas.Pen.Width:= random(3)+1; x:= random(100); y:= random(100); PaintBox1.Canvas.MoveTo(x,y); x:= random(100); y:= random(100); PaintBox1.Canvas.LineTo(x,y); end

8. Заполнить канву эллипсами случайным образом (круги, окружности - частный случай эллипса). Эллипсы рисуются методом Ellipse() с четырьмя параметрами - координатами верхнего левого и правого нижнего углов прямоугольника, в который эллипс вписывается. Кайма эллипса рисуется в соответствии с параметрами свойства Pen канвы, а заливается эллипс внутри цветом кисти Brush канвы.

for i:= 1 to 300 do begin // цвет и ширина каймы будущего эллипса

PaintBox1.Canvas.Pen.Color:= RGB(random(255),random(255),random(255)); PaintBox1.Canvas.Pen.Width:= random(3)+1; // цвет заливки внутренности эллипса

PaintBox1.Canvas.Brush.Color:= rgb(random(255),random(255),random(255));

Рис. 18.5.

// координаты углов прямоугольника, в который вписывается эллипс x:= random(150); y:= random(150); x2:= random(150); y2:= random(150);

// вписываем эллипс

PaintBox1.Canvas.Ellipse(x,y,x2,y2);

end;

9. Сделать канву на весь экран. Заполнить разноцветными прямоугольниками в случайных позициях и случайных размеров с помощью FillRect().

10. Создать графический образ так называемого множества Жюлиа. procedure TForm1.Button1Click(Sender: TObject);

var RE,IM,RE1,IM1: REAL; V,X,Y: INTEGER;

// вывод точки заданного цвета procedure PUTPIXEL(x,y,c:Integer); var cc: TColor; begin case c mod 8 of

0:cc:=clBlack;

1:cc:=clRed;

2:cc:=clLime;

3:cc:=clYellow;

4:cc:=clBlue;

5:cc:=clFuchsia;

6:cc:=clAqua; 7:cc:=clWhite;

end;

PaintBox1.Canvas.Pixels[x,y]:= cc;

end;

procedure QWA; begin

RE1:=RE*RE-IM*IM;

IM1:=2*RE*IM;

RE:=RE1;

IM:=IM1;

end;

procedure KUB;

begin

RE1:=RE*(RE*RE-3*FM*FM);

IM1:=IM*(3*RE*RE-IM*IM);

RE:=RE1;

IM:=IM1;

end; begin

PaintBox1.Canvas.Brush.Color:= rgb(0,0,0);

PaintBox1.Canvas.FillRect(Rect(0,0,640,480));

X:=-320;

REPEAT Y:=-240;

REPEAT V:=0; RE:=-1.+0.001*X; IM:=0+0.001*Y; REPEAT KUB;

RE:=RE+1.00003; IM:=IM+1.01828201638; if RE*RE > 50 then break;

if IM*IM > 50 then break;

V:=V+1; UNTIL V>40;

if (ABS(RE) > 10) or (ABS(IM) > 1000) then

begin

PUTPIXEL((X+320),(Y+240),TRUNC(V));

end

else PUTPIXEL((X+320),(Y+240),0); Y:=Y+1;

UNTIL Y > 241;

X:=X+1;

UNTIL X>320;

End;

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2020-12-05 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: