Добавил:
Upload
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:мат моделирование / проги / laba 2 / Unit1
.pas unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls;
type
TForm1 = class(TForm)
Image1: TImage;
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
masiv=array[0..3] of real;
var
Form1: TForm1;
x,y:masiv;
y0,x0,mahtab:integer;
implementation
function xk(xb:real):integer;
begin
xk:=round(x0+xb*mahtab);
end;
function yk(yb:real):integer;
begin
yk:=round(y0-yb*mahtab);
end;
{$R *.dfm}
function p3_0(t:real):real;
begin
p3_0:=(1-t)*(1-t)*(1-t);
end;
function p3_1(t:real):real;
begin
p3_1:=3*t*(1-t)*(1-t);
end;
function p3_2(t:real):real;
begin
p3_2:=3*t*t*(1-t);
end;
function p3_3(t:real):real;
begin
p3_3:=t*t*t;
end;
procedure bezie(x,y:masiv);
var
t,xb,yb:real;
i,xbk,ybk:integer;
begin
t:=0;
xb:=p3_0(t)*x[0]+p3_1(t)*x[1]+p3_2(t)*x[2]+p3_3(t)*x[3];
yb:=p3_0(t)*y[0]+p3_1(t)*y[1]+p3_2(t)*y[2]+p3_3(t)*y[3];
xbk:=xk(xb);
ybk:=yk(yb);
Form1.Image1.Canvas.MoveTo(xbk,ybk);
Form1.Image1.Canvas.Pen.Width:=1;
Form1.Image1.Canvas.Pen.Color:=clred;
while t<=1 do
begin
t:=t+0.01;
xb:=p3_0(t)*x[0]+p3_1(t)*x[1]+p3_2(t)*x[2]+p3_3(t)*x[3];
yb:=p3_0(t)*y[0]+p3_1(t)*y[1]+p3_2(t)*y[2]+p3_3(t)*y[3];
xbk:=xk(xb);
ybk:=yk(yb);
Form1.Image1.Canvas.LineTo(xbk,ybk);
end;
Form1.Image1.Canvas.Pen.Width:=1;
Form1.Image1.Canvas.Pen.Color:=clblue;
Form1.Image1.Canvas.MoveTo(xk(x[0]),yk(y[0]));
Form1.Image1.Canvas.LineTo(xk(x[1]),yk(y[1]));
Form1.Image1.Canvas.LineTo(xk(x[2]),yk(y[2]));
Form1.Image1.Canvas.LineTo(xk(x[3]),yk(y[3]));
for i:=0 to 3 do
begin
Form1.Image1.Canvas.Ellipse(xk(x[i])-2,yk(y[i])-2,xk(x[i])+2,yk(y[i])+2);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
xi,yi:integer;
begin
x0:=200; y0:=200;
Form1.Image1.Canvas.Pen.Width:=2;
Form1.Image1.Canvas.Pen.Color:=clblack;
Form1.Image1.Canvas.MoveTo(20,200);
Form1.Image1.Canvas.LineTo(380,200);
Form1.Image1.Canvas.MoveTo(200,20);
Form1.Image1.Canvas.LineTo(200,380);
mahtab:=20;
Form1.Image1.Canvas.Pen.Width:=1;
Form1.Image1.Canvas.Pen.Color:=clblack;
xi:=20;
while (xi<370) do
begin
xi:=xi+mahtab;
Form1.Image1.Canvas.MoveTo(xi,205);
Form1.Image1.Canvas.LineTo(xi,195);
end;
yi:=20;
while (yi<370) do
begin
yi:=yi+mahtab;
Form1.Image1.Canvas.MoveTo(195,yi);
Form1.Image1.Canvas.LineTo(205,yi);
end;
x[0]:=-5;
y[0]:=-3;
x[1]:=0;
y[1]:=4;
x[2]:=1;
y[2]:=-4;
x[3]:=-2;
y[3]:=5;
bezie(x,y);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Form1.Image1.Picture:=nil;
end;
end.
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls;
type
TForm1 = class(TForm)
Image1: TImage;
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
masiv=array[0..3] of real;
var
Form1: TForm1;
x,y:masiv;
y0,x0,mahtab:integer;
implementation
function xk(xb:real):integer;
begin
xk:=round(x0+xb*mahtab);
end;
function yk(yb:real):integer;
begin
yk:=round(y0-yb*mahtab);
end;
{$R *.dfm}
function p3_0(t:real):real;
begin
p3_0:=(1-t)*(1-t)*(1-t);
end;
function p3_1(t:real):real;
begin
p3_1:=3*t*(1-t)*(1-t);
end;
function p3_2(t:real):real;
begin
p3_2:=3*t*t*(1-t);
end;
function p3_3(t:real):real;
begin
p3_3:=t*t*t;
end;
procedure bezie(x,y:masiv);
var
t,xb,yb:real;
i,xbk,ybk:integer;
begin
t:=0;
xb:=p3_0(t)*x[0]+p3_1(t)*x[1]+p3_2(t)*x[2]+p3_3(t)*x[3];
yb:=p3_0(t)*y[0]+p3_1(t)*y[1]+p3_2(t)*y[2]+p3_3(t)*y[3];
xbk:=xk(xb);
ybk:=yk(yb);
Form1.Image1.Canvas.MoveTo(xbk,ybk);
Form1.Image1.Canvas.Pen.Width:=1;
Form1.Image1.Canvas.Pen.Color:=clred;
while t<=1 do
begin
t:=t+0.01;
xb:=p3_0(t)*x[0]+p3_1(t)*x[1]+p3_2(t)*x[2]+p3_3(t)*x[3];
yb:=p3_0(t)*y[0]+p3_1(t)*y[1]+p3_2(t)*y[2]+p3_3(t)*y[3];
xbk:=xk(xb);
ybk:=yk(yb);
Form1.Image1.Canvas.LineTo(xbk,ybk);
end;
Form1.Image1.Canvas.Pen.Width:=1;
Form1.Image1.Canvas.Pen.Color:=clblue;
Form1.Image1.Canvas.MoveTo(xk(x[0]),yk(y[0]));
Form1.Image1.Canvas.LineTo(xk(x[1]),yk(y[1]));
Form1.Image1.Canvas.LineTo(xk(x[2]),yk(y[2]));
Form1.Image1.Canvas.LineTo(xk(x[3]),yk(y[3]));
for i:=0 to 3 do
begin
Form1.Image1.Canvas.Ellipse(xk(x[i])-2,yk(y[i])-2,xk(x[i])+2,yk(y[i])+2);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
xi,yi:integer;
begin
x0:=200; y0:=200;
Form1.Image1.Canvas.Pen.Width:=2;
Form1.Image1.Canvas.Pen.Color:=clblack;
Form1.Image1.Canvas.MoveTo(20,200);
Form1.Image1.Canvas.LineTo(380,200);
Form1.Image1.Canvas.MoveTo(200,20);
Form1.Image1.Canvas.LineTo(200,380);
mahtab:=20;
Form1.Image1.Canvas.Pen.Width:=1;
Form1.Image1.Canvas.Pen.Color:=clblack;
xi:=20;
while (xi<370) do
begin
xi:=xi+mahtab;
Form1.Image1.Canvas.MoveTo(xi,205);
Form1.Image1.Canvas.LineTo(xi,195);
end;
yi:=20;
while (yi<370) do
begin
yi:=yi+mahtab;
Form1.Image1.Canvas.MoveTo(195,yi);
Form1.Image1.Canvas.LineTo(205,yi);
end;
x[0]:=-5;
y[0]:=-3;
x[1]:=0;
y[1]:=4;
x[2]:=1;
y[2]:=-4;
x[3]:=-2;
y[3]:=5;
bezie(x,y);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Form1.Image1.Picture:=nil;
end;
end.