Вращение компонента формы - PullRequest
       10

Вращение компонента формы

1 голос
/ 16 октября 2011

Мне нужно повернуть один компонент формы (эллипс) вокруг другого (круг). Мне кажется, что лучше делать это с полярными координатами. Таким образом, формула вращения:

X := Round(CenterX + SIN(Angle) * Radius);
Y := Round(CenterY + COS(Angle) * Radius);

где X, Y - координаты эллипса, радиус - радиус вращения; Угол - угол поворота; CenterX, CenterY - центр вращения.

Также я понял, что в компоненте Timer я должен написать следующий код:

Angle := Angle + 0.01;
if Angle> 2*Pi then Angle := Angle - 2*Pi;

И Форма должна быть перерисована.

Это будет выглядеть так:

enter image description here

Но я не могу собрать все в кучу. Я не знаю, как все это организовать. Спасибо за любую помощь.

1 Ответ

3 голосов
/ 16 октября 2011

Добавьте переменную t: double в свой класс формы и выполните

procedure TForm1.Timer1Timer(Sender: TObject);
var
  cx, cy: integer;
  x, y: integer;
const
  r = 200;
begin
  cx := Shape1.Left + Shape1.Width div 2;
  cy := Shape1.Top + Shape1.Height div 2;

  x := cx + round(r*sin(t));
  y := cy + round(r*cos(t));

  Shape2.Left := x - Shape2.Width div 2;
  Shape2.Top := y - Shape2.Height div 2;

  t := t + 0.01;
end;

, где, скажем, Timer1.Interval = 30.

Лично мне очень не нравится, когда люди делают анимацию с помощьюперемещение элементов управления VCL.Гораздо лучше прибегнуть к ручному рисованию GDI (или даже OpenGL).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...