18.03.2012, 18:13
|
Прохожий
|
|
Регистрация: 17.03.2012
Сообщения: 32
Репутация: 10
|
|
Вы уж не сердитесь на меня, я ведь ещё новичек. А вращение вокруг точки я все же сделала – как научили.
Подскажите, почему оси координат исчезают, когда начинаю вращать квадрат?
И как сделать, чтобы квадрат вращался не где-то в стороне, а именно вокруг центра координат
Код:
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]:=-50 ;
x[2]:=50 ;
y[2]:=-50 ;
x[3]:=50 ;
y[3]:=50 ;
x[4]:=-50 ;
y[4]:=50 ;
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.
|