Здравствуйте! Подскажите, почему оси координат исчезают, когда начинаю вращать параллелепипед? И как сделать, чтобы параллелепипед вращался не где-то в стороне, а именно вокруг центра координат
| Код |
unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ComCtrls, StdCtrls, ExtCtrls;
type TForm1 = class(TForm) Label1: TLabel; TrackBar1: TTrackBar; Image1: TImage; Button1: TButton; procedure TrackBar1Change(Sender: TObject); procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject);
private { Private declarations } public { Public declarations } end;
var Form1: TForm1; x,y,xn,yn:array[1..4] of integer; cosa,sina:double;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject); var x,y: Real; x0, y0: Integer; m: Integer; i: Integer; n: Integer; begin x0 := Image1.Width div 2; // центр координатной плоскости по х оси y0 := Image1.Height div 2; // центр координатной плоскости по у оси m := 25; // масштаб
// координатная плоскость Image1.Canvas.MoveTo(0, y0); Image1.Canvas.LineTo(ClientWidth, y0); Image1.Canvas.MoveTo(x0, 0); Image1.Canvas.LineTo(x0, ClientHeight);
x := -7; // стартовое значение функции n := Abs(Round(x)); // конечное значение функции // шкалирование осей for i := Round(x) to n do begin Image1.Canvas.MoveTo(x0+i*m, y0-5); Image1.Canvas.LineTo(x0+i*m, y0-(-5)); Image1.Canvas.TextOut(x0+i*m, y0+10, IntToStr(i)); Image1.Canvas.MoveTo(x0+5, y0-m*i); Image1.Canvas.LineTo(x0-5, y0-m*i); Image1.Canvas.TextOut(x0-15, y0+i*m, IntToStr(-i)); end; end;
procedure TForm1.FormCreate(Sender: TObject); begin x[1]:=-50 ; y[1]:=-20 ;
x[2]:=30 ; y[2]:=-20 ;
x[3]:=50 ; y[3]:=20 ;
x[4]:=-30 ; y[4]:=20 ;
end;
procedure TForm1.TrackBar1Change(Sender: TObject); var i:integer;
begin label1.Caption:=Inttostr(TrackBar1.Position); Image1.Canvas.FillRect(rect(0,0,Width,height));
cosa:=cos(2*pi*trackBar1.Position/360); sina:=sin(2*pi*trackBar1.Position/360); for i:=1 to 4 do begin Canvas.MoveTo(200+xn[i],200+yn[i]); Image1.Canvas.lineTo(200+xn[i],200+yn[i]);
xn[i]:=round((x[i]+100)*cosa-(y[i]+100)*sina); yn[i]:=round((x[i]+100)*sina+(y[i]+100)*cosa);
end; end;
end.
|
|