Показать сообщение отдельно
  #16  
Старый 18.03.2012, 18:13
koroleva25 koroleva25 вне форума
Прохожий
 
Регистрация: 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.
Ответить с цитированием