Словесное описание программы.
В работе на форму выводятся фигуры путём рисования пикселя стандартными средствами Delphi – это Pixels[x, y].
Фигуры – это сама точка, отрезок, контур треугольника и треугольник закрашенный (с заливкой).
Отрезок. Рассматриваются два варианта: 1) когда крайние точки лежат друг над другом, т.е. вертикальный отрезок. Тогда от самой верхней точки переходим к нижней и так далее, до самой нижней двигаемся. 2) когда крайние точки не лежат друг над другом. В этом случае делаем точкой №1 ту, что лежит левее, если требуется. Далее переходим от точки №1 до №2, увеличивая каждый раз координату “x” на 1, а “y” каждый раз вычисляем по формуле . И так доходим до точки №2.
Контур треугольника. Эта процедура вызывает три процедуры-отрезка. То есть, имея три вершины, строим три отрезка между этими вершинами.
Треугольник закрашенный. Сначала сортируем вершены так, чтобы вершина №1 была самой левой, а вершина №3 была самой правой, соответственно, вершина №2 будет лежать между остальными. Далее рассматриваем случаи: а) вершина№1 и вершина №2 лежат друг над другом, тогда двигаясь от вершины №3, изменяя координату “x” на “-1”, рисуем вертикальные линии до, к примеру, вершины№1. Линии рисуем от ребра между вершинами 3-1 и вершинами 3-2, вычисляя координаты “y” к соответствующей координате “x” как и
б) вершина№2 и вершина №3 лежат друг над другом делаем аналогично.
в) последний случай – обычный треугольник. Тут мы рисуем вертикальные линии от вершины№1 до вершины №2 опять же между рёбрами вершин 1-2 и 1-3, но только до вертикальной линии, опущенной из вершины№2 к ребру 1-3. Далее рисуем вертикальные линии от вершины№3 до вершины №2 между рёбрами вершин 3-2 и 3-1, но только до вертикальной линии, опущенной из вершины№2 к ребру 1-3.
Текст программы.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls;
type
TForm1 = class(TForm)
Image: TImage;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
Edit5: TEdit;
Edit6: TEdit;
Button4: TButton;
Button5: TButton;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Button6: TButton;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure Button6Click(Sender: TObject);
private
{ Private declarations }
BMemory: TBitmap;
tex: Boolean;
procedure Pixel(x,y: integer; Colr,colg,colb: byte); //рисование пикселя
Procedure Swap(var a, b: integer); //процедура обмена переменных местами
procedure Clear(); //очистка формы
procedure garizont ( y, x1, x2: integer); //рисование горизонтальной линии
procedure Linia(x0, y0, x1, y1: integer); //рисование линии
procedure Treugolneg( x1, y1, x2, y2, x3, y3: integer);//рисование треугольника
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
tex:=false;
BMemory := TBitmap.Create; // создание области для текстуры в оперативной памяти
BMemory.PixelFormat := pf24bit; //настройка формата пикселя (24 бит цвет)
BMemory.Width := 640;
BMemory.Height := 480;
BMemory.LoadFromFile('tex.bmp');
clear;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
BMemory.Free; //очистка выделеной ранее области памяти
end;
//очистка формы ===========================================================
procedure TForm1.Clear();
begin
Image.Canvas.Brush.Color :=clWhite;
Image.Canvas.Rectangle(0,0,640,480);
end;
//рисование пикселя =======================================================
procedure TForm1.Pixel(x,y: integer; Colr,colg,colb: byte);
begin
if tex then
Image.Canvas.Pixels[x,y]:=BMemory.Canvas.Pixels[x,y]
else
Image.Canvas.Pixels[x,y]:=rgb(Colr,colg,colb);
end;
//процедура обмена переменных местами =====================================
procedure TForm1.Swap(var a, b: integer);
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.