【问题标题】:How do I rotate a picturebox around a point?如何围绕一个点旋转图片框?
【发布时间】:2016-05-06 08:49:50
【问题描述】:

解决了

我正在尝试模拟一颗行星旋转一颗恒星。我目前知道移动图片框的语法 (我有一个计时器,所以它会重复)

private void rotate_timer(object sender, EventArgs e) {
picturebox1.location = new point (picturebox1.location.x + 1,           
picturebox1.location.y + 1);
}

但我不知道从哪里开始,以便它围绕特定点旋转。 我将如何围绕 (0,0) 旋转它?

【问题讨论】:

  • 您将在图片框旋转图像,而不是图片框本身 - How do I rotate a picture in C# - 通常移动图片框的原理相同:考虑改为绘制图像在特定坐标处直接在(大概)表单上。
  • 但我不需要旋转图像。我需要该框以围绕一个给定距离的点旋转。
  • 如果您想绕轴旋转对象,您需要使用三角函数(例如x = Math.Sin(angle); y = Math.Cos(angle);)。 ([0, 0] 的原点只是在原点绕 z 轴旋转。)
  • 您的意思是如何在弯曲的路径上移动,而不是如何旋转。答案是:了解你的路径和动画。在 winforms 中使用计时器并计算每个刻度的新位置点。如果您还想旋转,您仍然需要旋转图像。控件只能是直的,不能旋转。

标签: c# timer visual-studio-2015 rotation picturebox


【解决方案1】:

这可能会有所帮助:

float angle = 0;
float rotSpeed = 1;
Point origin = new Point(222, 222);  // your origin
int distance = 100;                  // your distance

private void timer1_Tick(object sender, EventArgs e)
{
    angle += rotSpeed;
    int x = (int)(origin.X + distance * Math.Sin(angle *Math.PI / 180f));
    int y = (int)(origin.Y + distance * Math.Cos(angle *Math.PI / 180f));
    yourControl.Location = new Point(x, y);
}

选择您的计时器Interval,不要因为它看起来有点不平衡而感到失望。 Winforms 在动画方面真的很糟糕..

如果您希望图像也可以旋转,您可以找到example here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-27
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    • 2017-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多