2011-10-16 62 views
1

我需要围绕另一个(圆形)旋转一个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; 

和形状,必须重新绘制。

它应该是这样的:

enter image description here

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

+0

我想你需要指定一些更多的细节。我无法理解X,Y是什么,CenterX,CenterY是什么,角度和半径是多少。它们如何与椭圆和圆圈相关? –

+0

@DavidHeffernan,thanx,我在我的问题中解释过。 – Daria

回答

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

+0

谢谢sooo!有用!附:要求移动完全VCL控件。 – Daria