2011-10-16 61 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