1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89:
| type ThreeD_Object = class (TObject) private points:integer; color:Tcolor; fixedpoint_x,fixedpoint_y,fixedpoint_z:integer; x,y,z:array [1..100] of integer; function x2Dto3D(b,n,m:real):integer; function y2Dto3D(b,n,m:real):integer; public constructor Createn(xcoor,ycoor,zcoor:array of integer; number_points:integer; fixpoint_x,fixpoint_y,fixpoint_z:integer; ObjectColor:Tcolor; canvas:Tcanvas); end;
var Form1: TForm1; j,k,l:array [1..3] of integer; Polygon:ThreeD_Object;
implementation
{$R *.dfm}
constructor ThreeD_Object.Createn; var i:integer; begin points:=number_points; color:=ObjectColor; fixedpoint_x:=fixpoint_x; fixedpoint_y:=fixpoint_y; fixedpoint_z:=fixpoint_z; for i:=1 to points do begin x[i]:=xcoor[i]; y[i]:=ycoor[i]; z[i]:=zcoor[i]; end; canvas.Pen.Color:=color; canvas.MoveTo(x2Dto3D(x[1],y[1],z[1]),y2Dto3D(x[1],y[1],z[1])); for i:=1 to points do begin
if i=points then begin canvas.lineto(x2Dto3D(x[1],y[1],z[1]),y2Dto3D(x[1],y[1],z[1])); end else canvas.lineto(x2Dto3D(x[i],y[i],z[i]),y2Dto3D(x[i],y[i],z[i])); end; end;
function ThreeD_Object.x2Dto3D; begin if m=0 then result:=round(b) else result:=round(b+(fixedpoint_x-b)*(m/fixedpoint_z)); end;
function ThreeD_Object.y2Dto3D; begin if m=0 then result:=round(n) else result:=round(n-(fixedpoint_y-n)*(m/fixedpoint_z)); end;
procedure TForm1.Button1Click(Sender: TObject); var d:integer; begin paintbox1.Refresh; for d:=0 to 100 do begin j[d]:=0; k[d]:=0; l[d]:=0; end; j[1]:=10; j[2]:=10; j[3]:=20; k[1]:=10; k[2]:=20; k[3]:=20; l[1]:=0; l[2]:=0; l[3]:=0; Polygon:=ThreeD_Object.Createn(j,k,l,3,100,100,100,clblack,paintbox1.canvas); end; |