Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
KN43_2013_Kostjo_Christian_rozrah.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
1.3 Mб
Скачать

5.2.2 Віконні інтерфейси

Рис.5.1.1 Програма реалізації на початку закривання діафранми

Рис.5.1.2 Програма реалізації при закритті діафрагми

Рис.5.1.3 Програма реалізації закритої діафрагми

5.3. Програмна реалізація з WinApi

5.3.1 Опис алгоритму

unit Unit1;

Interface

uses

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

Dialogs, ExtCtrls, StdCtrls, ComCtrls, Buttons;

type

TForm1 = class(TForm)

Image1: tImage;

TrackBar1: TTrackBar;

Label1: TLabel;

Label2: TLabel;

RadioButton1: TRadioButton;

RadioButton2: TRadioButton;

RadioButton3: TRadioButton;

RadioButton4: TRadioButton;

BitBtn1: TBitBtn;

BitBtn2: TBitBtn;

Label3: TLabel;

TrackBar2: TTrackBar;

Label4: TLabel;

CheckBox2: TCheckBox;

ComboBox1: TComboBox;

ComboBox2: TComboBox;

Label5: TLabel;

Label6: TLabel;

ComboBox3: TComboBox;

procedure BitBtn2Click(Sender: TObject);

procedure FormActivate(Sender: TObject);

procedure TrackBar1Change(Sender: TObject);

procedure BitBtn1Click(Sender: TObject);

procedure Label4Click(Sender: TObject);

procedure TrackBar2Change(Sender: TObject);

procedure ComboBox1Change(Sender: TObject);

procedure ComboBox2Change(Sender: TObject);

procedure ComboBox3Change(Sender: TObject);

procedure Label5Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

k,f,x,y,rx,ry,kd,fd:integer;

colGr1,colGr2,colAx:TColor;

Implementation

{$R *.dfm}

Procedure FonDraw;

Begin

Form1.Image1.Canvas.FillRect(Rect(0,0,Form1.Image1.Width,Form1.Image1.Height));

End;

Procedure DrawAxes;

Begin

k:=Form1.TrackBar1.Position;

Form1.Image1.Canvas.Pen.Color:=colAx;

Form1.Image1.Canvas.MoveTo(0,Trunc(Form1.Image1.Height/2));

Form1.Image1.Canvas.LineTo(Form1.Image1.Width,Trunc(Form1.Image1.Height/2));

Form1.Image1.Canvas.MoveTo(Trunc(Form1.Image1.Width/2),0);

Form1.Image1.Canvas.LineTo(Trunc(Form1.Image1.Width/2),Form1.Image1.Height);

Form1.Image1.Canvas.Pen.Color:=clSilver;

x:=Trunc(Form1.Image1.Width/2);

while x<Form1.Image1.Width do

begin

x:=x+k;

Form1.Image1.Canvas.MoveTo(x,0);

Form1.Image1.Canvas.LineTo(x,Form1.Image1.Height);

end;

x:=Trunc(Form1.Image1.Width/2);

while x>0 do

begin

x:=x-k;

Form1.Image1.Canvas.MoveTo(x,0);

Form1.Image1.Canvas.LineTo(x,Form1.Image1.Height);

end;

y:=Trunc(Form1.Image1.Height/2);

while y<Form1.Image1.Height do

begin

y:=y+k;

Form1.Image1.Canvas.MoveTo(0,y);

Form1.Image1.Canvas.LineTo(Form1.Image1.Width,y);

end;

y:=Trunc(Form1.Image1.Height/2);

while y>0 do

begin

y:=y-k;

Form1.Image1.Canvas.MoveTo(0,y);

Form1.Image1.Canvas.LineTo(Form1.Image1.Width,y);

end;

End;

Function fy1(fx:integer):real;

Begin

fy1:=(sqr(fx)-1)/(sqr(sqr(fx))+1)

End;

Function fy2(fx:integer):real;

Begin

fy2:=-sqr(sqr(fx))*fx+2*sqr(fx)*fx-1;

End;

Function fy1D(fxD:real):real;

Begin

fy1D:=(sqr(fxD)-1)/(sqr(sqr(fxD))+1)

End;

Function fy2D(fxD:real):real;

Begin

fy2D:=-sqr(sqr(fxD))*fxD+2*sqr(fxD)*fxD-1;

End;

Procedure Grafic(pg:integer);

Begin

if pg=1 then

begin

FonDraw;

DrawAxes

end

else if pg=2 then

begin

Form1.Image1.Canvas.Pen.Color:=colGr1;

rx:=0;

ry:=Trunc(fy1(rx));

x:=Trunc(Form1.Image1.Width/2)+k*rx;

y:=Trunc(Form1.Image1.Height/2)-k*ry;

Form1.Image1.Canvas.MoveTo(x,y);

while x<Form1.Image1.Width do

begin

rx:=rx+1;

ry:=Trunc(fy1(rx));

x:=Trunc(Form1.Image1.Width/2)+k*rx;

y:=Trunc(Form1.Image1.Height/2)-k*ry;

Form1.Image1.Canvas.LineTo(x,y);

end;

rx:=0;

ry:=Trunc(fy1(rx));

x:=Trunc(Form1.Image1.Width/2)+k*rx;

y:=Trunc(Form1.Image1.Height/2)-k*ry;

Form1.Image1.Canvas.MoveTo(x,y);

while x>0 do

begin

rx:=rx-1;

ry:=Trunc(fy1(rx));

x:=Trunc(Form1.Image1.Width/2)+k*rx;

y:=Trunc(Form1.Image1.Height/2)-k*ry;

Form1.Image1.Canvas.LineTo(x,y);

end

end

else if pg=3 then

begin

Form1.Image1.Canvas.Pen.Color:=colGr2;

rx:=0;

ry:=Trunc(fy2(rx));

x:=Trunc(Form1.Image1.Width/2)+k*rx;

y:=Trunc(Form1.Image1.Height/2)-k*ry;

Form1.Image1.Canvas.MoveTo(x,y);

while x<Form1.Image1.Width do

begin

rx:=rx+1;

ry:=Trunc(fy2(rx));

x:=Trunc(Form1.Image1.Width/2)+k*rx;

y:=Trunc(Form1.Image1.Height/2)-k*ry;

Form1.Image1.Canvas.LineTo(x,y);

end;

rx:=0;

ry:=Trunc(fy2(rx));

x:=Trunc(Form1.Image1.Width/2)+k*rx;

y:=Trunc(Form1.Image1.Height/2)-k*ry;

Form1.Image1.Canvas.MoveTo(x,y);

while x>0 do

begin

rx:=rx-1;

ry:=Trunc(fy2(rx));

x:=Trunc(Form1.Image1.Width/2)+k*rx;

y:=Trunc(Form1.Image1.Height/2)-k*ry;

Form1.Image1.Canvas.LineTo(x,y);

end

end

End;

Procedure func;

Begin

if Form1.RadioButton1.Checked then f:=1

else if Form1.RadioButton2.Checked then f:=2

else if Form1.RadioButton3.Checked then f:=3

else if Form1.RadioButton4.Checked then f:=4;

case f of

1:Grafic(1);

2:Grafic(2);

3:Grafic(3);

4:Begin

Grafic(2);

Grafic(3)

end

end;

End;

Procedure GraficD(pgD:integer);

Var dx,dy,krok:real;

Begin

if pgD=2 then

begin

Form1.Image1.Canvas.Pen.Color:=colGr1;

krok:=1/(10*kd);

dx:=0;

x:=Trunc(Form1.Image1.Width/2);

dy:=fy1D(dx);

y:=Trunc(Form1.Image1.Height/2-dy*(kd*10));

Form1.Image1.Canvas.MoveTo(x,y);

while x<Form1.Image1.Width do

begin

dx:=dx+krok;

x:=x+1;

dy:=fy1D(dx);

y:=Trunc(Form1.Image1.Height/2-dy*(kd*10));

Form1.Image1.Canvas.LineTo(x,y);

end;

dx:=0;

x:=Trunc(Form1.Image1.Width/2);

dy:=fy1D(dx);

y:=Trunc(Form1.Image1.Height/2-dy*(kd*10));

Form1.Image1.Canvas.MoveTo(x,y);

while x>0 do

begin

dx:=dx-krok;

x:=x-1;

dy:=fy1D(dx);

y:=Trunc(Form1.Image1.Height/2-dy*(kd*10));

Form1.Image1.Canvas.LineTo(x,y);

end;

end

else if pgD=3 then

begin

Form1.Image1.Canvas.Pen.Color:=colGr2;

krok:=1/(10*kd);

dx:=0;

x:=Trunc(Form1.Image1.Width/2);

dy:=fy2D(dx);

y:=Trunc(Form1.Image1.Height/2-dy*(kd*10));

Form1.Image1.Canvas.MoveTo(x,y);

while x<Form1.Image1.Width do

begin

dx:=dx+krok;

x:=x+1;

dy:=fy2D(dx);

y:=Trunc(Form1.Image1.Height/2-dy*(kd*10));

Form1.Image1.Canvas.LineTo(x,y);

end;

dx:=0;

x:=Trunc(Form1.Image1.Width/2);

dy:=fy2D(dx);

y:=Trunc(Form1.Image1.Height/2-dy*(kd*10));

Form1.Image1.Canvas.MoveTo(x,y);

while x>0 do

begin

dx:=dx-krok;

x:=x-1;

dy:=fy2D(dx);

y:=Trunc(Form1.Image1.Height/2-dy*(kd*10));

Form1.Image1.Canvas.LineTo(x,y);

end;

end

End;

Procedure DrawAxesD;

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