我需要围绕另一个(圆形)旋转一个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。
看起来像这样:
但我不能聚集在一起。我不知道如何组织这一切。 Thanx任何帮助。
答案 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
,比方说。