unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Math, StdCtrls, Spin, ExtCtrls;
type
mclassic=class(Tobject) // задаём класс явно
// заполняем поля класса
//private
xd,xb,xa,xc,x0,yd,yb,ya,yc,y0,o1,o2,o3,o4,R:integer;
od,dc,ab,ob:integer;
w,w1,w2,w3: real;
SpinEdit1: TSpinEdit;
Edit1: TEdit;
//заполняем методы класса
procedure vh;
procedure draw;
end;
type
TForm1 = class(TForm)
Image1: TImage;
Edit1: TEdit;
SpinEdit1: TSpinEdit;
Button1: TButton;
procedure SpinEdit1Change(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
mclas: mclassic;
implementation
{$R *.dfm}
// процедура ввода входных данных
procedure mclassic.vh;
begin
R:=StrToInt(Edit1.Text);
od:=round(R);
ob:=round(od);
dc:=90;
ab:=70;
W:=spinedit1.value*pi/180;
end;
//процедура рисования кинематического механизма
procedure mclassic.draw;
begin
x0:=round(form1.image1.width/2);
y0:=round(form1.image1.height/2);
w1:=pi-pi/2-w;
xd:=x0+round(od*cos(w));
yd:=y0-round(od*sin(w));
xb:=x0-round(ob*cos(w1));
yb:=y0-round(ob*sin(w1));
xc:=x0+round(sqrt(dc*dc-9*r*r*sin(w)*sin(w)));
yc:=y0+round(dc);
xa:=x0-round(ab);
ya:=y0+round(2*r*cos(w1));
o1:=round(x0-od);
o2:=round(y0-od);
o3:=round(x0+od);
o4:=round(y0+od);
form1.image1.picture:=nil;
with form1.image1.canvas do
begin
ellipse(o1,o2,o3,o4);
ellipse(xd-3, yd-3, xd+3, yd+3);
ellipse(xb-3, yb-3, xb+3, yb+3);
moveto(x0,y0);
Pen.Style:=psDot;
lineto(xd,yd);
moveto(x0,y0);
lineto(xb,yb);
Pen.Style:=psSolid;
moveto(xc,yc);
Rectangle(xc+10,yc+8,xc-10,yc-8);
Lineto(xc+400,yc);
lineto(xc-400,yc);
moveto(xc,yc+10);
Pen.Width:=2;
lineto(400,yc+10);
lineto(150,yc+10);
moveto(xc,yc-10);
lineto(400,yc-10);
lineto(150,yc-10);
moveto(xd,yd);
Pen.Width:=1;
lineto(xc,yc);
ellipse(xc-3, yc-3, xc+3, yc+3);
moveto(xb,yb);
lineto(xa,ya);
ellipse(xa-3, ya-3, xa+3, ya+3);
moveto(xa,ya);
Pen.Width:=2;
lineto(xa,ya+400);
lineto(xa,ya-400);
Pen.Width:=1;
moveto(xd+5,yd-8);
Textout(xd+5,yd-8,'D');
moveto(xb-5,yb-15);
Textout(xb-5,yb-15,'B');
moveto(xa-15,ya-8);
Textout(xa-15,ya-8,'A');
moveto(xc+10,yc-25);
Textout(xc+10,yc-25,'C');
moveto(x0+1,y0+1);
Textout(x0+1,y0+1,'O');
moveto(x0,y0+R);
Textout(x0,y0+R+3,'P');
Pen.Width:=2;
Lineto(x0+20,y0+R);
Lineto(x0-20,y0+R);
end;
end;
procedure TForm1.SpinEdit1Change(Sender: TObject);
begin
mclas:=mclassic.Create;// выделение памяти под экземпляр
mclas.vh;
mclas.draw;
end;
end.