地球有多种旋转方式,具体取决于您如何看待它。
如果您从两极上方看它,它会像圆盘或齿轮一样旋转,您可以找到它的代码here。这样做的好处是您可以使用任何图像并对其进行旋转。
如果你从侧面看它,面对赤道你不能轻易使用位图,但只使用两种颜色仍然会很好看..
这是一个“地球状”旋转的示例:
float angle = 0f;
float aSpeed = 4f; // <-- set your speed
Brush brush1 = Brushes.CadetBlue; // and your..
Brush brush2 = Brushes.DarkSlateBlue; // ..colors
private void timer1_Tick(object sender, EventArgs e)
{
angle += aSpeed;
if (angle + aSpeed > 360)
{
angle -= 360f;
Brush temp = brush1;
brush1 = brush2;
brush2 = temp;
}
pictureBox1.Invalidate();
}
private void pictureBox1_Click(object sender, EventArgs e)
{
timer1.Enabled = !timer1.Enabled;
}
private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
e.Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
Rectangle r = pictureBox1.ClientRectangle;
Rectangle r2 = r; // see below..
r.Inflate(-20, -20); // a little smaller than the panel or pBox
if (angle < 180)
{
e.Graphics.FillEllipse(brush1, r);
e.Graphics.FillPie(brush2, r, 270, 180);
r.Inflate(-(int)(r.Width * angle / 360f), 0);
e.Graphics.FillEllipse(brush2, r);
}
else
{
e.Graphics.FillEllipse(brush2, r);
e.Graphics.FillPie(brush1, r, 90, 180);
r.Inflate(-(int)(r.Width * angle / 360f), 0);
e.Graphics.FillEllipse(brush1, r);
}
}
}
这是由三个DrawXXX 调用创建的:一个颜色的圆、一个椭圆和一个圆弧,设置为显示相同的第二个颜色的半圆。
注意:为了使角速度均匀,您可能需要使用一点 Math.Sin 和/或角度表..
如果您从任何其他角度看它,并且如果您需要以 3D 显示旋转位图,您将无法轻松绘制它,但需要求助于显示框架。..
但是您可以将链接中的磁盘旋转与上面的代码结合起来,会得到相当复杂的旋转,看起来很像 3D 球体。只需在绘图前添加代码即可。
float bw2 = r2.Width / 2f;
float bh2 = r2.Height / 2f;
e.Graphics.TranslateTransform(bw2, bh2);
e.Graphics.RotateTransform(angle / 3);
e.Graphics.TranslateTransform(-bw2, -bh2);
..使用上面的绘图代替DrawImage 线并将ResetTransform 移动到末尾。您将需要使用不同的或按比例缩放的角度!