Графика.
Программирование: delphi
Координаты х, у отсчитываются от верхнего левого угла, то есть он считается точкой с координатами (0, 0), увеличение по оси х идет слева направо, а по оси у — сверху вниз. Для конкретной точки указывается цвет. Функция RGB () формирует цвет комбинацией интенсивности красного, зеленого и синего (интенсивность задается числом от 0 до 255). Например, черный — RGB (0, 0, 0), красный — RGB (255, 0… Читать ещё >
Графика. Программирование: delphi (реферат, курсовая, диплом, контрольная)
Для рисования статичных рисунков используется компонент PaintBox (панель System). Этот компонент размещается на форме в виде прозрачного пунктирного квадрата, и в его пределах можно рисовать. Рисование выполняется обращением к свойству Canvas (графическая канва или холст) этого компонента: PaintBoxl.Canvas. У него в свою очередь есть свойство Pixels (PaintBoxl.Canvas.Pixels), которое представляет собой матрицу, двумерный массив заданного размера — поточечный образ канвы, каждый элемент — отдельная точка. В Pixels [] отсчет точек (пикселов экрана) начинается с 0.
Координаты х, у отсчитываются от верхнего левого угла, то есть он считается точкой с координатами (0, 0), увеличение по оси х идет слева направо, а по оси у — сверху вниз. Для конкретной точки указывается цвет. Функция RGB () формирует цвет комбинацией интенсивности красного, зеленого и синего (интенсивность задается числом от 0 до 255). Например, черный — RGB (0, 0, 0), красный — RGB (255, 0, 0), синий — RGB (0, 0, 255), белый — RGB (255, 255, 255).
Свойство Canvas есть у многих визуальных объектов, в том числе у Формы, следовательно, можно рисовать и непосредственно на форме.
Для рисования Canvas содержит множество графических примитивов, которые рисуются методами, принадлежащими холсту:
- • Arc — дуга;
- • Ellipse — закрашенный эллипс или окружность;
- • FillRect — закрашенный прямоугольник;
- • LineTo — провести линию в заданную точку;
- • MoveTo — перейти в заданную точку;
- • Rectangle — прямоугольная рамка;
- • TextOut — вывод текста.
Цель работы — создать программу, заполняющую доступную канву различными способами.
- 1. Разместить на форме компонент PaintBox.
- 2. Заполнить доступную канву 300 красными точками в случайных позициях по нажатиям на некоторую кнопку.
Рис. 73. Заполнение канвы красным цветом случайным образом
- 3. Для выхода из программы необходимо щелкнуть мышью на закрывающей кнопке в строке заголовка.
- 4. Записать код в обработчике нажатия, procedure TForml. ButtonlClick (Sender: TObject);
var i, x, y: Integer; begin
randomize;
for i := 1 to 300 do begin
x := random (100); у := random (100);
PaintBoxl.Canvas.Pixels[x, y] := RGB (255,0,0); end
end;
- 5. Изменить RGB (255, 0, 0) на RGB (random (255), random (255), random (255)).
- 6. Заполнить фон черным цветом перед началом выполнения программы с помощью метода канвы FillRect. Метод вызывается с указанием прямоугольной области заливки цветом:
FillRect (Rect (0, 0, 100, 100)) // координаты верхнего левого.
// и правого нижнего углов.
Рис. 74. Заполнение канвы случайным образом
Вложенное слово Rect формирует данное типа «прямоугольник». Перед вызовом FillRect надо указать цвет заливки:
PaintBoxl.Canvas.Brush.Color := RGB (0, 0, 0);
Рис. 75. Фон канвы
procedure TForml. ButtonlClick (Sender: TObject); var
i, x, y: Integer; begin
PaintBoxl.Canvas.Brush.Color := RGB (0, 0, 0); PaintBoxl. Canvas. FillRect (Rect (0, 0, 100, 100));
for i := 1 to 300 do begin
x := random (100);
у := random (100);
PaintBoxl.Canvas.Pixels[x, y] :=.
RGB (random (255)j random (255), random (255));
end
end;
7. Заполнить канву случайными разноцветными линиями разной толщины. Линия рисуется с помощью методов (сначала задается начальная точка, потом конечная):
PaintBoxl.Canvas.MoveTo (10,10);
PaintBoxl.Canvas.LineTo (50,50);
Цвет линии и толщина задаются свойством канвы Реп (карандаш). Pen. Color — цвет карандаша, Pen. Width — толщина линии в пикселах (по умолчанию — 1).
Рис. 76. Заполнение канвы линиями
for i := 1 to 300 do begin
PaintBoxl.Canvas.Pen.Color :=.
RGB (random (255), random (255), random (255)); PaintBoxl.Canvas.Pen.Width := random (3) + 1; x := random (100); у := random (100);
PaintBoxl.Canvas.MoveTo (x, y); x := random (100); у := random (100);
PaintBoxl.Canvas.LineTo (x, y); end.
8. Заполнить канву эллипсами случайным образом (круги, окружности — частный случай эллипса). Эллипсы рисуются методом Ellipse () с четырьмя параметрами — координатами верхнего левого и правого нижнего углов прямоугольника, в который эллипс вписывается. Граница эллипса рисуется в соответствии с параметрами свойства Реп канвы, а заливается эллипс внутри цветом кисти Brush канвы.
Рис. 77. Заполнение канвы эллипсами
for i := 1 to 300 do begin
// цвет и ширина каймы будущего эллипса PaintBoxl.Canvas.Pen.Color :=.
RGB (random (255), random (255), random (255));
PaintBoxl.Canvas.Pen.Width := random (3) + 1;
// цвет заливки внутренности эллипса PaintBoxl.Canvas.Brush.Color :=.
RGB (random (255), random (255), random (255));
// координаты углов прямоугольника, в который вписывается эллипс х := random (150); у := random (150); х2 := random (150); у2 := random (150);
// вписываем эллипс
PaintBoxl.Canvas.Ellipse (x, у, х2, у2); end;
- 9. Сделать канву на весь экран. Заполнить разноцветными прямоугольниками в случайных позициях и случайных размеров с помощью FillRectO.
- 10. Создать графический образ так называемого множества Жюлиа.
procedure TForml. ButtonlClick (Sender: TObject); var
RE, IM, RE1, IM1: REAL;
V, X, Y: INTEGER;
// вывод точки заданного цвета procedure PUTPIXEL (X, Y, с: 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;
PaintBoxl.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 * IM * IM);
IM1 := IM * (3 * RE * RE — IM * IM);
RE := RE1;
IM := IM1; end;
begin
PaintBoxl.Canvas.Brush.Color := rgb (0j 0, 0); PaintBoxl.Canvas.FillRect (Rect (0j 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.3;
IM := IM + 1.1 828 201 638;
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;