Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Program Figures;
- uses Crt, Graph;
- type
- PointP=^Point;
- Point=object
- private
- X:integer;
- Y:integer;
- Color:integer;
- public
- constructor Init(InitX, InitY, InitC:integer);
- function GetX:integer;
- function GetC:integer;
- procedure PutX(NewX:integer);
- procedure PutY(NewY:integer);
- procedure PutColor(NewColor:integer);
- procedure ShowP;
- procedure HideP;
- procedure MoveTo(XL,YL:integer);
- end;
- PointL=^Line;
- Line=object
- private
- X:integer;
- Y:integer;
- Color:integer;
- R:integer;
- fi:double;
- X1,X2,Y1,Y2:integer;
- public
- constructor Init(InitX,InitY,InitC,InitR:integer; Initfi:double);
- function GetX:integer;
- function GetY:integer;
- function GetC:integer;
- function Length:double;
- procedure PutX(NewX:integer);
- procedure PutY(NewY:integer);
- procedure Putfi(Newfi:double);
- procedure PutR(NewR:integer);
- procedure PutColor(NewColor:integer);
- procedure ShowL;
- procedure HideL;
- procedure TurnL(Dfi:double);
- procedure MoveL(DR:integer);
- procedure MoveToT(XL,YL:integer);
- end;
- PointT=^Triangle;
- Triangle=object
- private
- X:integer;
- Y:integer;
- Color:integer;
- R:integer;
- fi:double;
- alpha:double;
- X1,X2,Y1,Y2,X3,Y3:integer;
- TempColor:integer;
- public
- constructor Init(InitX,InitY,InitC,InitR:integer; Initfi,Initalpha:double);
- function GetX:integer;
- function GetC:integer;
- function Square:double;
- procedure PutX(NewX:integer);
- procedure PutY(NewY:integer);
- procedure Putfi(Newfi:double);
- procedure PutR(NewR:integer);
- procedure Putalpha(Newalpha:double);
- procedure PutColor(NewColor:integer);
- procedure ShowT;
- procedure HideT;
- procedure TurnT(Dfi:double);
- procedure MoveT(DR:integer);
- procedure MoveToT(XL,YL:integer);
- end;
- PointPr=^Prisma;
- Prisma=object
- private
- X:integer;
- Y:integer;
- Color:integer;
- R:integer;
- fi:double;
- alpha:double;
- H:integer;
- X1,X2,Y1,Y2,X3,Y3,X11,X22,Y11,Y22,X33,Y33:integer;
- TempColor:integer;
- public
- constructor Init(InitX,InitY,InitC,InitR,InitH:integer; Initfi,Initalpha:double);
- function GetX:integer;
- function GetC:integer;
- function Volume:double;
- procedure PutX(NewX:integer);
- procedure PutY(NewY:integer);
- procedure Putfi(Newfi:double);
- procedure PutR(NewR:integer);
- procedure Putalpha(Newalpha:double);
- procedure PutColor(NewColor:integer);
- procedure ShowPr;
- procedure HidePr;
- procedure TurnPr(Dfi:double);
- procedure MovePr(DR:integer);
- procedure MoveToPr(XL,YL:integer);
- end;
- constructor Point.Init(InitX, InitY, InitC:integer);
- begin
- X:=InitX;
- Y:=InitY;
- Color:=InitC;
- end;
- constructor Line.Init(InitX,InitY,InitC,InitR:integer; Initfi:double);
- begin
- X:=InitX;
- Y:=InitY;
- Color:=InitC;
- R:=InitR;
- fi:=Initfi;
- end;
- constructor Triangle.Init(InitX,InitY,InitC,InitR:integer; Initfi,Initalpha:double);
- begin
- X:=InitX;
- Y:=InitY;
- Color:=InitC;
- R:=InitR;
- fi:=Initfi;
- alpha:=Initalpha;
- end;
- constructor Prisma.Init(InitX,InitY,InitC,InitR,InitH:integer; Initfi,Initalpha:double);
- begin
- X:=InitX;
- Y:=InitY;
- Color:=InitC;
- R:=InitR;
- fi:=Initfi;
- alpha:=Initalpha;
- H:=InitH;
- end;
- function Point.GetX; begin GetX:=X; end;
- function Point.GetC; begin GetC:=Color; end;
- procedure Point.PutX(NewX:integer);begin X:=NewX;end;
- procedure Point.PutY(NewY:integer);begin Y:=NewY;end;
- procedure Point.PutColor(NewColor:integer); begin Color:=NewColor; end;
- procedure Point.ShowP; begin PutPixel(X,Y,Color); end;
- procedure Point.HideP; begin PutPixel(X,Y,GetBkColor); end;
- procedure Point.MoveTo(XL,YL:integer);
- begin
- HideP;
- PutX(X+Xl);
- PutY(Y+YL);
- ShowP;
- end;
- function Line.GetX; begin GetX:=X; end;
- procedure Line.PutX(NewX:integer);begin X:=NewX;end;
- procedure Line.PutY(NewY:integer);begin Y:=NewY;end;
- procedure Line.PutColor(NewColor:integer); begin Color:=NewColor; end;
- procedure Line.ShowL;
- var TempColor:integer;
- begin
- X1:=X+round(R*sin(fi));
- Y1:=Y-round(R*cos(fi));
- X2:=X+round(R*sin(fi+Pi));
- Y2:=Y-round(R*cos(fi+Pi));
- TempColor:=getcolor;
- setcolor(Color);
- line(X1,Y1,X2,Y2);
- SetColor(TempColor);
- end;
- function Line.Length;
- begin
- X1:=X+round(R*sin(fi));
- Y1:=Y-round(R*cos(fi));
- X2:=X+round(R*sin(fi+Pi));
- Y2:=Y-round(R*cos(fi+Pi));
- Length:=sqrt((X1-X2)*(X1-X2)+(Y1-Y2)*(Y1-Y2));
- end;
- procedure Line.HideL;
- begin
- TempColor:=GetC;
- PutColor(GetBkColor);
- ShowL;
- PutColor(TempColor);
- end;
- procedure Line.MoveTo(XL,YL:integer);
- begin
- procedure Line.TurnL(Dfi:double);
- begin
- HideL;
- Putfi(fi+Dfi);
- ShowL;
- end;
- procedure Line.MoveL(Dr:integer)
- begin
- HideL;
- PutR(R-Dr);
- ShowL;
- end;
- procedure Line.MoveToL(XL,Yl:integer);
- begin
- HideL;
- PutX(X+XL);
- PutY(Y+YL);
- ShowL;
- end;
- //triangle
- function Triangle.GetX; begin GetX:=X; end;
- function Triangle.GetC; begin GetC:=Color; end;
- procedure Triangle.PutX(NewX:integer); begin X:=NewX;end;
- procedure Triangle.PutY(NewY:integer); begin Y:=NewY;end;
- procedure Triangle.Putfi(Newfi:double); begin fi:=Newfi;end;
- procedure Triangle.PutR(NewR:integer); begin R:=NewR;end;
- procedure Triangle.Putalpha(Newalpha:double);begin alpha:=Newalpha;end;
- procedure Triangle.PutColor(NewColor:integer); begin Color:=NewColor;end;
- procedure Triangle.ShowT;
- begin
- X1:=X+round(R*sin(fi));
- Y1:=Y-round(R*cos(fi));
- X2:=X+round(R*sin(fi+Pi));
- Y2:=Y-round(R*cos(fi+Pi));
- X3:=X+round(R*sin(alpha));
- Y3:=Y-round(R*cos(alpha));
- TempColor:=GetColor;
- SetColor(Color);
- line(X1,Y1,X2,Y2);
- line(X1,Y1,X3,Y3);
- line(X2,Y2,X3,Y3);
- SetColor(TempColor);
- end;
- function Triangle.Square;
- begin
- X1:=X+round(R*sin(fi));
- Y1:=Y-round(R*cos(fi));
- X2:=X+round(R*sin(fi+Pi));
- Y2:=Y-round(R*cos(fi+Pi));
- X3:=X+round(R*sin(alpha));
- Y3:=Y-round(R*cos(alpha));
- Square:=(sqrt((X1-X2)*(X1-X2)+(Y1-Y2)*(Y1-Y2))*sqrt((X1-X3)*(X1-X3)+(Y1-Y3)*(Y1-Y3))*sqrt((X2-X3)*(X2-X3)+(Y2-Y3)*(Y2-Y3)))/(4*R);
- end;
- procedure Triangle.HideT;
- begin
- TempColor:=GetC;
- PutColor(GetBkColor);
- ShowT;
- PutColor(TempColor);
- end;
- procedure Triangle.TurnT(Dfi:double);
- begin
- HideT;
- Putfi(fi+Dfi);
- Putalpha(alpha+Dalpha);
- ShowT;
- end;
- procedure Triangle.MoveT(DR:integer);
- begin
- HideT;
- PutR(R-Dr);
- ShowT;
- end;
- procedure Triangle.MoveToT(XL,YL:integer);
- begin
- HideT;
- PutX(X+XL);
- PutY(Y+YL);
- ShowT;
- end;
- //Prisma
- function Prisma.GetX; begin GetX:=X; end;
- function Prisma.GetC; begin GetC:=Color; end;
- procedure Prisma.PutX(NewX:integer); begin X:=NewX;end;
- procedure Prisma.PutY(NewY:integer); begin Y:=NewY;end;
- procedure Prisma.Putfi(Newfi:double); begin fi:=Newfi;end;
- procedure Prisma.PutR(NewR:integer); begin R:=NewR;end;
- procedure Prisma.Putalpha(Newalpha:double);begin alpha:=Newalpha;end;
- procedure Prisma.PutColor(NewColor:integer); begin Color:=NewColor;end;
- procedure Prisma.ShowPr;
- begin
- X1:=X+round(R*sin(fi));
- Y1:=Y-round(R*cos(fi));
- X2:=X+round(R*sin(fi+Pi));
- Y2:=Y-round(R*cos(fi+Pi));
- X3:=X+round(R*sin(alpha));
- Y3:=Y-round(R*cos(alpha));
- X11:=(X+H)+round(R*sin(fi));
- Y11:=(Y+H)-round(R*cos(fi));
- X22:=(X+H)+round(R*sin(fi+M_PI));
- Y22:=(Y+H)-round(R*cos(fi+M_PI));
- X33:=(X+H)+round(R*sin(alpha));
- Y33:=(Y+H)-round(R*cos(alpha));
- TempColor:=GetColor;
- SetColor(Color);
- line(X1,Y1,X2,Y2);
- line(X1,Y1,X3,Y3);
- line(X2,Y2,X3,Y3);
- line(X1,Y1,X11,Y11);
- line(X2,Y2,X22,Y22);
- line(X3,Y3,X33,Y33);
- SetColor(TempColor);
- end;
- function Triangle.Volume;
- begin
- X1:=X+round(R*sin(fi));
- Y1:=Y-round(R*cos(fi));
- X2:=X+round(R*sin(fi+Pi));
- Y2:=Y-round(R*cos(fi+Pi));
- X3:=X+round(R*sin(alpha));
- Y3:=Y-round(R*cos(alpha));
- Volume:=((sqrt((X1-X2)*(X1-X2)+(Y1-Y2)*(Y1-Y2))*sqrt((X1-X3)*(X1-X3)+(Y1-Y3)*(Y1-Y3))*sqrt((X2-X3)*(X2-X3)+(Y2-Y3)*(Y2-Y3)))/(4*R))*H;
- end;
- procedure Prisma.HidePr;
- begin
- TempColor:=GetC;
- PutColor(GetBkColor);
- ShowPr;
- PutColor(TempColor);
- end;
- procedure Prisma.TurnPr(Dfi:double);
- begin
- HidePr;
- Putfi(fi+Dfi);
- Putalpha(alpha+Dalpha);
- ShowPr;
- end;
- procedure Prisma.MovePr(DR:integer);
- begin
- HidePr;
- PutR(R-Dr);
- ShowPr;
- end;
- procedure prisma.MoveToPr(XL,YL:integer);
- begin
- HidePr;
- PutX(X+XL);
- PutY(Y+YL);
- ShowPr;
- end;
- var X,Y,GDriver,GMode,ErrCode:integer;
- var Pk,lr,xl,xt,xpr,xc:integer;
- P1,P2,P3:Point;L1,L2,L3:Line; T1,T2,T3:Triangle; Pr1,Pr2,Pr3:Prisma;
- begin
- clrscr;
- GDriver:=DETECT;
- GMode:=DETECT;
- InitGraph(GDriver,GMode,'');
- ErrCode:=GraphResult;
- if not (ErrCode=grOk) then
- begin
- writeln('GRAPHIC ERROR',GraphErrorMsg(ErrCode));
- writeln('Use keyboard');
- readln;
- halt(1);
- end;
- P1.Init(100,150,2);
- P2.Init(100,270,6);
- P3.Init(100,380,7);
- P1.ShowP;
- P2.ShowP;
- P3.ShowP;
- L1.Init(200,150,2,30,170);
- L2.Init(200,270,6,40,90);
- L3.Init(200,380,7,30,100);
- L1.ShowL();
- L2.ShowL();
- L3.ShowL();
- T1.Init(330,150,2,30,0,55);
- T2.Init(330,270,6,30,50,30);
- T3.Init(330,380,7,30,100,60);
- T1.ShowT();
- T2.ShowT();
- T3.ShowT();
- Pr1.Init(450,150,2,30,0,70,30);
- Pr2.Init(450,270,6,25,10,90,30);
- Pr3.Init(450,380,7,35,10,80,30);
- Pr1.ShowPr();
- Pr2.ShowPr();
- Pr3.ShowPr();
- readln;
- Pk:=2;lr:=1;xl:=1;xt:=2;xpr:=1;xc:=1;
- repeat
- P1.MoveTo(Pk,Pk);
- P2.MoveTo(Pk,0);
- P3.MoveTo(0,Pk);
- if(P1.GetX>=120)or(P1.GetX()<=80) then Pk:= -Pk;
- L1.TurnL(0.1);
- T1.TurnT(0.1);
- Pr1.TurnPr(0.1);
- L2.MoveL(lr);
- T2.MoveT(lr);
- Pr2.MovePr(lr);
- if(L2.GetR()<20)or(L2.GetR()>50) then lr:=-lr;
- L3.MoveToL(xc,0);
- T3.MoveToT(xl,0);
- Pr3.MoveToPr(xpr,0);
- if(L3.GetX()>220)or(L3.GetX()<180) then xc:=-xc;
- if(T3.GetX()>345)or(T3.GetX()<315) then xl:=-xl;
- if(Pr3.GetX()>485)or(Pr3.GetX()<425) then xpr:=-xpr;
- delay(100);
- until KeyPressed;
- closegraph;
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement