形状组件旋转

时间:2011-10-16 18:27:01

标签: delphi rotation shape

我需要围绕另一个(圆形)旋转一个Shape组件(椭圆)。在我看来,最好用极坐标来做。所以旋转公式是:

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;

必须重新绘制Shape。

看起来像这样:

enter image description here

但我不能聚集在一起。我不知道如何组织这一切。 Thanx任何帮助。

1 个答案:

答案 0 :(得分:3)

将变量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)绘图要好得多。