C#在WinForms中,围绕中心点以默认角度旋转2个控件

C#在WinForms中,围绕中心点以默认角度旋转2个控件,c#,winforms,rotation,controls,point,C#,Winforms,Rotation,Controls,Point,我试图旋转2个windows窗体按钮,如下图所示: 旋转期间,它们之间的距离应为0,单击标签时,它们应“旋转”90度,如下所示: if (red is up and black is down) { red will be down and black will be up; } else { red will be up and black will be down; } 我使用此方法返回所需的点“位置”,但无法获得所需的旋转“效果”: 就像我在评论中说的那样: priv

我试图旋转2个windows窗体按钮,如下图所示:

旋转期间,它们之间的距离应为0,单击标签时,它们应“旋转”90度,如下所示:

if (red is up and black is down)
{
    red will be down and black will be up;
}
else 
{
    red will be up and black will be down;
}
我使用此方法返回所需的点“位置”,但无法获得所需的旋转“效果”:


就像我在评论中说的那样:

private Point calculateCircumferencePoint(double radoffset, Point center, double radius)
        {
            Point res = new Point();

            double x = center.X + radius * Math.Cos(radoffset);
            double y = center.Y + radius * Math.Sin(radoffset);

            res.X = (int)x;
            res.Y = (int)y;

            return res;
        }
这里还有一个测试应用程序:

编辑:对于第二个按钮,您只需将初始偏移设置为
Math.PI


EDIT2:要旋转按钮使其交叉(如8的路径),需要将半径设置为
Sin(radoffset)
Cos(radoffset)

我忘了提到,旋转点将在计时器中设置,以产生旋转效果。你需要一个计时器,为圆的参数方程设置RAD偏移量。我不太懂真光测量,举个例子就好了。对于按钮之间没有距离,旋转它们就像旋转它们的位置一样,我需要确定偏移量或半径?这取决于您想要实现的目标,但我假设您是对的。要自动化距离,您可以将半径设置为
(radoffset%Math.PI)*constvalue
,如果我在计算周长之前在计时器中设置半径,按钮将减速并从一个位置跳到另一个位置。您必须对这些值进行一些试验,以获得完美的结果;)
private Point calculateCircumferencePoint(double radoffset, Point center, double radius)
        {
            Point res = new Point();

            double x = center.X + radius * Math.Cos(radoffset);
            double y = center.Y + radius * Math.Sin(radoffset);

            res.X = (int)x;
            res.Y = (int)y;

            return res;
        }