文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

C# GDI+ 实现物体椭圆运动详解

2024-11-28 15:37

关注
x = a * cos(t)
y = b * sin(t)

其中:

二、完整代码实现

图片图片

public partial class Form1 : Form
{
    private Timer timer;
    private double angle = 0;
    private const double STEP = 1;  // 角度步进值  
    private const int A = 150;      // 长半轴  
    private const int B = 100;      // 短半轴  
    private Point center;           // 椭圆中心点  
    private Point currentPos;       // 运动物体当前位置  


    public Form1()
    {
        InitializeComponent();


        // 启用双缓冲,防止闪烁  
        this.DoubleBuffered = true;
        // 设置控件样式为全部在WM_PAINT中绘制  
        // 这样可以防止控件擦除背景时闪烁,提高绘制效率  
        this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);


        // 计算中心点  
        center = new Point(this.ClientSize.Width / 2, this.ClientSize.Height / 2);


        // 初始化定时器  
        timer = new Timer();
        timer.Interval = 20;  // 20ms更新一次  
        timer.Tick += Timer_Tick;
        timer.Start();
    }


    private void Timer_Tick(object sender, EventArgs e)
    {
        // 计算新位置  
        angle = (angle + STEP) % 360;
        double radian = angle * Math.PI / 180;


        currentPos = new Point(
            (int)(center.X + A * Math.Cos(radian)),
            (int)(center.Y + B * Math.Sin(radian))
        );


        this.Invalidate();  // 触发重绘  
    }


    protected override void OnPaint(PaintEventArgs e)
    {
        base.OnPaint(e);
        Graphics g = e.Graphics;


        // 设置高质量绘图  
        g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;


        // 绘制椭圆轨迹  
        using (Pen pen = new Pen(Color.LightGray, 1))
        {
            g.DrawEllipse(pen,
                center.X - A, center.Y - B,
                2 * A, 2 * B);
        }


        // 绘制运动物体  
        using (SolidBrush brush = new SolidBrush(Color.Blue))
        {
            const int BALL_SIZE = 20;
            g.FillEllipse(brush,
                currentPos.X - BALL_SIZE / 2,
                currentPos.Y - BALL_SIZE / 2,
                BALL_SIZE, BALL_SIZE);
        }


        // 绘制中心点  
        using (SolidBrush brush = new SolidBrush(Color.Red))
        {
            g.FillEllipse(brush,
                center.X - 3, center.Y - 3,
                6, 6);
        }


        // 显示当前角度  
        using (Font font = new Font("Arial", 12))
        using (SolidBrush brush = new SolidBrush(Color.Black))
        {
            g.DrawString($"Angle: {angle:F1}°",
                font, brush, new PointF(10, 10));
        }
    }
}

三、注意事项

  1. 确保启用双缓冲以防止闪烁
  2. 注意释放GDI+资源(使用using语句)
  3. 合理设置定时器间隔,避免过于频繁的刷新
  4. 考虑性能优化,避免在绘图时进行复杂计算

这个示例展示了如何使用C# GDI+实现基本的椭圆运动效果,代码简洁且易于理解,可以作为更复杂动画效果的基础。

来源:技术老小子内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯