Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
КТМ.DOC
Скачиваний:
8
Добавлен:
26.11.2019
Размер:
3.66 Mб
Скачать

Пример программы построения векторной петли и расчета ее площади

program Project1;

uses

Forms,

Unit1 in 'Unit1.pas' {Form1},

Unit2 in 'Unit2.pas' {Form2};

{$R *.res}

begin

Application.Initialize;

Application.CreateForm(TForm1, Form1);

Application.CreateForm(TForm2, Form2);

Application.Run;

end.

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, //

Dialogs, Grids, StdCtrls; // Подключение стандартных модулей

type

TForm1 = class(TForm)

Edit1: TEdit;

Label1: TLabel;

StringGrid1: TStringGrid;

Button1: TButton;

procedure FormCreate(Sender: TObject);

procedure Button1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

{Const

koef : integer = 10;}

var

Form1: TForm1;

Mp : array[1..50] of TPoint; // Создание массива переменных для ввода координат X, Y

Mindex : integer; // Количество опорных точек, высчитывается автоматически

koef : integer; // коэффициент масштабирования

implementation

uses Unit2;

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject); // процедура инициализации переменных

var

i : integer;

st : string;

begin

koef:=10;

StringGrid1.Cells[1,0]:='X';

StringGrid1.Cells[2,0]:='Y';

for i:=1 to 50 do StringGrid1.Cells[0,i]:=IntToStr(i);

Mindex:=0;

if ParamCount>0 then

begin // проверка ключей командной строки

for i:=1 to ParamCount do

if copy(ParamStr(i),1,2)='/k' then

begin

st:=ParamStr(i);

delete(st,1,3);

koef:=StrToInt(st);

end;

end;

end;

procedure TForm1.Button1Click(Sender: TObject); // Процедура построения контуров объекта по заданным точкам

var

i : integer;

begin

Form2.Show; // Отображение рисунка на экране монитора

for i:=1 to 50 do

begin

if (StringGrid1.Cells[1,i]='') or (StringGrid1.Cells[2,i]='') then

begin

Mindex:=i-1;

break;

end;

Mp[i].X:=StrToInt(StringGrid1.Cells[1,i]);

Mp[i].Y:=StrToInt(StringGrid1.Cells[2,i]);

end;

form2.Image1.canvas.Brush.Color:=clBlack;

for i:=2 to mindex do

begin

form2.Image1.Canvas.MoveTo(Mp[i-1].X*koef,Mp[i-1].Y*koef); // Отрисовка изображения

form2.Image1.Canvas.LineTo(Mp[i].X*koef,Mp[i].Y*koef);

// form2.Image1.Canvas.Pixels[Mp[i].X,Mp[i].Y];

// form2.Image1.Canvas.LineTo(100,100);

end;

form2.Image1.Canvas.MoveTo(Mp[mindex].X*koef,Mp[mindex].Y*koef);

form2.Image1.Canvas.LineTo(Mp[1].X*koef,Mp[1].Y*koef);

form2.Image1.Refresh; // Перерисовать изображение

end;

end.

unit Unit2;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, ExtCtrls; // Подключение стандартных модулей

type

TForm2 = class(TForm)

Image1: TImage;

procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer); // заливка рисунка черным цветом

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form2: TForm2;

MAr : integer; // Площадь объекта

implementation

Uses Unit1;

{$R *.dfm}

procedure TForm2.Image1MouseDown(Sender: TObject; Button: TMouseButton; // процедура закрашивания объекта в черный цвет и расчет закрашенной площади

Shift: TShiftState; X, Y: Integer);

var

i,i1 : integer;

begin

Image1.Canvas.FloodFill(X,Y,clBlack, fsBorder);

Application.ProcessMessages;

mAr:=0;

for i1:=0 to Image1.Height-1 do // Вычисление закрашенной площади

for i:=0 to Image1.Width-1 do

begin

if Image1.Canvas.Pixels[i,i1]=clBlack then

begin

inc(mAr);

Form2.Caption:='Площадь = '+IntToStr(mAr div sqr(koef))+' точек';

Application.ProcessMessages; // Процедура обработки сообщений системы

end;

end;

Form1.Edit1.Text:=IntToStr(mAr div sqr(koef)); // Отображение результата расчета площади.

end;

end.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]