Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
КГ3.docx
Скачиваний:
2
Добавлен:
21.09.2019
Размер:
136.46 Кб
Скачать

Лабораторная работа №3

«Комплексные операции»

студентки 532 группы

Казак Юлии

Код программы:

Масштабирование:

unit Unit2;

interface

uses

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

Dialogs, StdCtrls, ExtCtrls;

type

TForm2 = class(TForm)

GroupBox1: TGroupBox;

Edit1: TEdit;

GroupBox2: TGroupBox;

Label1: TLabel;

Label2: TLabel;

Edit2: TEdit;

Edit3: TEdit;

RadioGroup1: TRadioGroup;

Button1: TButton;

procedure RadioGroup1Click(Sender: TObject);

procedure Button1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form2: TForm2;

TreanglA:array[1..3,1..3] of integer;

rectanglA:array[1..4,1..3] of integer;

Treanglm:array[1..3,1..3] of real;

rectanglm:array[1..4,1..3] of real;

TreanglR:array[1..3,1..3] of real;

rectanglR:array[1..4,1..3] of real;

B:array[1..3,1..3] of real;

Z:array[1..3,1..3] of real;

implementation

{$R *.dfm}

uses Unit1;

procedure TForm2.RadioGroup1Click(Sender: TObject);

begin

if form2.RadioGroup1.ItemIndex=0 then

begin

form2.GroupBox1.Visible:=true;

form2.GroupBox2.Visible:=false;

end;

if form2.RadioGroup1.ItemIndex=1 then

begin

form2.GroupBox2.Visible:=true;

form2.GroupBox1.Visible:=false;

end;

if form2.RadioGroup1.ItemIndex=2 then

begin

form2.GroupBox1.Visible:=true;

form2.GroupBox2.Visible:=false;

end;

if form2.RadioGroup1.ItemIndex=3 then

begin

form2.GroupBox2.Visible:=true;

form2.GroupBox1.Visible:=false;

end;

end;

procedure TForm2.Button1Click(Sender: TObject);

var ii,jj,kk,mm,xo,yo:integer;

begin

form2.Hide;

for ii:=1 to 3 do

for jj:=1 to 3 do

if ii=jj then B[ii,jj]:=1

else

B[ii,jj]:=0;

if form2.RadioGroup1.ItemIndex=0 then

begin

b[1,1]:=sqrt(strtoint(form2.Edit1.Text));

b[2,2]:=sqrt(strtoint(form2.Edit1.Text));

end;

if form2.RadioGroup1.ItemIndex=1 then

begin

b[1,1]:=strtoint(form2.Edit2.Text);

b[2,2]:=strtoint(form2.Edit3.Text);

end;

if form2.RadioGroup1.ItemIndex=2 then

begin

b[1,1]:=1/sqrt(strtoint(form2.Edit1.Text));

b[2,2]:=1/sqrt(strtoint(form2.Edit1.Text));

end;

if form2.RadioGroup1.ItemIndex=3 then

begin

b[1,1]:=1/(strtoint(form2.Edit2.Text));

b[2,2]:=1/(strtoint(form2.Edit3.Text));

end;

//преобразование для треугольника

if tr=true then

begin

//переходим к абсолютной системе координат

for ii:=1 to 3 do

begin

TreanglA[ii,1]:=Treangl[ii,1]-xx;

TreanglA[ii,2]:=yy-Treangl[ii,2];

TreanglA[ii,3]:=1;

end;

//поиск середины треугольника

xo:=round((TreanglA[1,1]+TreanglA[2,1]+TreanglA[3,1])/3);

yo:=round((TreanglA[1,2]+TreanglA[2,2]+TreanglA[3,2])/3);

//заполнение матрицы преобразования

for ii:=1 to 3 do

for mm:=1 to 3 do

if ii=mm then

Z[ii,mm]:=1

else

Z[ii,mm]:=0;

Z[3,1]:=-xo;

Z[3,2]:=-yo;

//смещение в начало координат

for ii:=1 to 3 do

for mm:=1 to 3 do

begin

TreanglM[ii,mm]:=0;

for jj:=1 to 3 do

TreanglM[ii,mm]:=TreanglM[ii,mm]+TreanglA[ii,jj]*Z[jj,mm];

end;

//масштабирование

for ii:=1 to 3 do

for kk:=1 to 3 do

begin

TreanglR[ii,kk]:=0;

for jj:=1 to 3 do

TreanglR[ii,kk]:=TreanglR[ii,kk]+TreanglM[ii,jj]*B[jj,kk];

end;

//заполнение матрицы преобразования

for ii:=1 to 3 do

for mm:=1 to 3 do

if ii=mm then

Z[ii,mm]:=1

else

Z[ii,mm]:=0;

Z[3,1]:=xo;

Z[3,2]:=yo;

//смещение обратно

for ii:=1 to 3 do

for mm:=1 to 3 do

begin

TreanglM[ii,mm]:=0;

for jj:=1 to 3 do

TreanglM[ii,mm]:=TreanglM[ii,mm]+TreanglR[ii,jj]*Z[jj,mm];

end;

//переход к относительной системе координат

for ii:=1 to 3 do

begin

Treangl[ii,1]:=round(xx+TreanglM[ii,1]);

Treangl[ii,2]:=round(yy-TreanglM[ii,2]);

end;

form1.Image1.Canvas.MoveTo(Treangl[1,1],Treangl[1,2]);

form1.Image1.Canvas.LineTo(Treangl[2,1],Treangl[2,2]);

form1.Image1.Canvas.LineTo(Treangl[3,1],Treangl[3,2]);

form1.Image1.Canvas.LineTo(Treangl[1,1],Treangl[1,2]);

form2.Edit1.Text:='';

form2.Edit2.Text:='';

form2.Edit3.Text:='';

form2.GroupBox1.Visible:=false;

form2.GroupBox2.Visible:=false;

form2.RadioGroup1.ItemIndex:=-1;

end;

//преобразование для четырехугольника

if rec=true then

begin

//переходим к абсолютной системе координат

for ii:=1 to 4 do

begin

RectanglA[ii,1]:=Rectangl[ii,1]-xx;

RectanglA[ii,2]:=yy-Rectangl[ii,2];

RectanglA[ii,3]:=1;

end;

//поиск середины четырехугольника

xo:=round((RectanglA[1,1]+RectanglA[2,1]+RectanglA[3,1]+RectanglA[4,1])/4);

yo:=round((RectanglA[1,2]+RectanglA[2,2]+RectanglA[3,2]+RectanglA[4,2])/4);

//заполнение матрицы преобразования

for ii:=1 to 3 do

for mm:=1 to 3 do

if ii=mm then

Z[ii,mm]:=1

else

Z[ii,mm]:=0;

Z[3,1]:=-xo;

Z[3,2]:=-yo;

//смещение в начало координат

for ii:=1 to 4 do

for mm:=1 to 3 do

begin

RectanglM[ii,mm]:=0;

for jj:=1 to 3 do

RectanglM[ii,mm]:=RectanglM[ii,mm]+RectanglA[ii,jj]*Z[jj,mm];

end;

// масштабирование

for ii:=1 to 4 do

for kk:=1 to 3 do

begin

RectanglR[ii,kk]:=0;

for jj:=1 to 3 do

RectanglR[ii,kk]:= RectanglR[ii,kk]+RectanglM[ii,jj]*B[jj,kk];

end;

//заполнение матрицы преобразования

for ii:=1 to 3 do

for mm:=1 to 3 do

if ii=mm then

Z[ii,mm]:=1

else

Z[ii,mm]:=0;

Z[3,1]:=xo;

Z[3,2]:=yo;

//смещение обратно

for ii:=1 to 4 do

for mm:=1 to 3 do

begin

RectanglM[ii,mm]:=0;

for jj:=1 to 3 do

RectanglM[ii,mm]:=RectanglM[ii,mm]+RectanglR[ii,jj]*Z[jj,mm];

end;

//переход к относительной системе координат

for ii:=1 to 4 do

begin

Rectangl[ii,1]:=round(xx+RectanglM[ii,1]);

Rectangl[ii,2]:=round(yy-RectanglM[ii,2]);

end;

form1.Image1.Canvas.MoveTo(Rectangl[1,1],Rectangl[1,2]);

form1.Image1.Canvas.LineTo(rectangl[2,1],rectangl[2,2]);

form1.Image1.Canvas.LineTo(rectangl[3,1],rectangl[3,2]);

form1.Image1.Canvas.LineTo(rectangl[4,1],rectangl[4,2]);

form1.Image1.Canvas.LineTo(rectangl[1,1],rectangl[1,2]);

form2.Edit1.Text:='';

form2.Edit2.Text:='';

form2.Edit3.Text:='';

form2.GroupBox1.Visible:=false;

form2.GroupBox2.Visible:=false;

form2.RadioGroup1.ItemIndex:=-1;

end;

end;

end.

Сдвиг:

unit Unit4;

Interface

uses

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

Dialogs, StdCtrls, ExtCtrls;

type

TForm4 = class(TForm)

Button1: TButton;

Edit1: TEdit;

CheckBox1: TCheckBox;

CheckBox2: TCheckBox;

Edit2: TEdit;

procedure Button1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form4: TForm4;

TreanglA:array[1..3,1..3] of integer;

rectanglA:array[1..4,1..3] of integer;

TreanglR:array[1..3,1..3] of real;

rectanglR:array[1..4,1..3] of real;

Treanglm:array[1..3,1..3] of real;

rectanglm:array[1..4,1..3] of real;

B:array[1..3,1..3] of real;

Z:array[1..3,1..3] of real;

Implementation

{$R *.dfm}

uses Unit1;

procedure TForm4.Button1Click(Sender: TObject);

Var II,jj,kk,mm,xo,yo:integer;

begin

form4.Hide;

for ii:=1 to 3 do

for jj:=1 to 3 do

if ii=jj then B[ii,jj]:=1

else

B[ii,jj]:=0;

if form4.CheckBox1.Checked then

B[1,2]:=strtoint(form4.Edit1.Text);

if form4.CheckBox2.Checked then

B[2,1]:=strtoint(form4.Edit2.Text);

if form4.CheckBox1.Checked and form4.CheckBox2.Checked then

begin

B[1,2]:=strtoint(form4.Edit1.Text);

B[2,1]:=strtoint(form4.Edit2.Text);

end;

//Т р е у г о л ь н и к

if tr=true then

begin

//переходим к абсолютной системе координат

for ii:=1 to 3 do

begin

TreanglA[ii,1]:=Treangl[ii,1]-xx;

TreanglA[ii,2]:=yy-Treangl[ii,2];

TreanglA[ii,3]:=1;

end;

//поиск середины треугольника

xo:=round((TreanglA[1,1]+TreanglA[2,1]+TreanglA[3,1])/3);

yo:=round((TreanglA[1,2]+TreanglA[2,2]+TreanglA[3,2])/3);

//заполнение матрицы преобразования

for ii:=1 to 3 do

for mm:=1 to 3 do

if ii=mm then

Z[ii,mm]:=1

else

Z[ii,mm]:=0;

Z[3,1]:=-xo;

Z[3,2]:=-yo;

//смещение в начало координат

for ii:=1 to 3 do

for mm:=1 to 3 do

begin

TreanglM[ii,mm]:=0;

for jj:=1 to 3 do

TreanglM[ii,mm]:=TreanglM[ii,mm]+TreanglA[ii,jj]*Z[jj,mm];

end;

//сдвиг

for ii:=1 to 3 do

for kk:=1 to 3 do

begin

TreanglR[ii,kk]:=0;

for jj:=1 to 3 do

TreanglR[ii,kk]:=TreanglR[ii,kk]+TreanglM[ii,jj]*B[jj,kk];

end;

//заполнение матрицы преобразования

for ii:=1 to 3 do

for mm:=1 to 3 do

if ii=mm then

Z[ii,mm]:=1

else

Z[ii,mm]:=0;

Z[3,1]:=xo;

Z[3,2]:=yo;

//смещение обратно

for ii:=1 to 3 do

for mm:=1 to 3 do

begin

TreanglM[ii,mm]:=0;

for jj:=1 to 3 do

TreanglM[ii,mm]:=TreanglM[ii,mm]+TreanglR[ii,jj]*Z[jj,mm];

end;

//переходим к относительной системе координат

for ii:=1 to 3 do

begin

Treangl[ii,1]:=round(xx+TreanglM[ii,1]);

Treangl[ii,2]:=round(yy-TreanglM[ii,2]);

end;

form1.Image1.Canvas.MoveTo(Treangl[1,1],Treangl[1,2]);

form1.Image1.Canvas.LineTo(Treangl[2,1],Treangl[2,2]);

form1.Image1.Canvas.LineTo(Treangl[3,1],Treangl[3,2]);

form1.Image1.Canvas.LineTo(Treangl[1,1],Treangl[1,2]);

form4.Edit1.Text:='';

form4.Edit2.Text:='';

form4.CheckBox1.Checked:=false;

form4.CheckBox2.Checked:=false;

end;

// Ч е т ы р е х у г о л ь н и к

if rec=true then

begin

//переходим к абсолютной системе координат

for ii:=1 to 4 do

begin

RectanglA[ii,1]:=Rectangl[ii,1]-xx;

RectanglA[ii,2]:=yy-Rectangl[ii,2];

RectanglA[ii,3]:=1;

end;

//поиск середины четырехугольника

xo:=round((RectanglA[1,1]+RectanglA[2,1]+RectanglA[3,1]+RectanglA[4,1])/4);

yo:=round((RectanglA[1,2]+RectanglA[2,2]+RectanglA[3,2]+RectanglA[4,2])/4);

//заполнение матрицы преобразования

for ii:=1 to 3 do

for mm:=1 to 3 do

if ii=mm then

Z[ii,mm]:=1

else

Z[ii,mm]:=0;

Z[3,1]:=-xo;

Z[3,2]:=-yo;

//смещение в начало координат

for ii:=1 to 4 do

for mm:=1 to 3 do

begin

RectanglM[ii,mm]:=0;

for jj:=1 to 3 do

RectanglM[ii,mm]:=RectanglM[ii,mm]+RectanglA[ii,jj]*Z[jj,mm];

end;

// сдвиг

for ii:=1 to 4 do

for kk:=1 to 4 do

begin

RectanglR[ii,kk]:=0;

for jj:=1 to 4 do

RectanglR[ii,kk]:= RectanglR[ii,kk]+RectanglM[ii,jj]*B[jj,kk];

end;

//заполнение матрицы преобразования

for ii:=1 to 3 do

for mm:=1 to 3 do

if ii=mm then

Z[ii,mm]:=1

else

Z[ii,mm]:=0;

Z[3,1]:=xo;

Z[3,2]:=yo;

//смещение обратно

for ii:=1 to 4 do

for mm:=1 to 3 do

begin

RectanglM[ii,mm]:=0;

for jj:=1 to 3 do

RectanglM[ii,mm]:=RectanglM[ii,mm]+RectanglR[ii,jj]*Z[jj,mm];

end;

//переходим к относительной системе координат

for ii:=1 to 4 do

begin

Rectangl[ii,1]:=round(xx+RectanglR[ii,1]);

Rectangl[ii,2]:=round(yy-RectanglR[ii,2]);

end;

form1.Image1.Canvas.MoveTo(Rectangl[1,1],Rectangl[1,2]);

form1.Image1.Canvas.LineTo(rectangl[2,1],rectangl[2,2]);

form1.Image1.Canvas.LineTo(rectangl[3,1],rectangl[3,2]);

form1.Image1.Canvas.LineTo(rectangl[4,1],rectangl[4,2]);

form1.Image1.Canvas.LineTo(rectangl[1,1],rectangl[1,2]);

form4.Edit1.Text:='';

form4.Edit2.Text:='';

form4.CheckBox1.Checked:=false;

form4.CheckBox2.Checked:=false;

end;

end;

end.

Отображение относительно прямой:

unit Unit7;

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