沿着一条线移动一个图片框 [英] Move a picturebox along a line

查看:111
本文介绍了沿着一条线移动一个图片框的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述


我想用计时器沿着一条线移动一个图片框。我有2分作为起点和终点。下面的代码移动了图片框,但没有沿着我的行移动:



我尝试过:



< pre lang =   C#> Point _start; 
Point _end;
int _interval = 7 ;
Point _middle;
double 弧度;
private void timer1_Tick( object sender,EventArgs e)
{
_middle.X - = Convert.ToInt16(_interval * Math.Cos(radians));
_middle.Y - = Convert.ToInt16(_interval * Math.Sin(radians));

pictureBox1.Location = _middle;
}

private void Form1_Load( object sender,EventArgs e)
{
_start = pictureBox1.Location;
_end = new 点( 50 50 );
_middle = _start;

radians =(Angle(_start,_end) - 180 )* -1;

timer1.Enabled = true ;
}

const double Rad2Deg = 180 0 / Math.PI;

private double Angle(Point start,Point end)
{
return Math.Atan2(start.Y - end.Y,end.X - start.X)* Rad2Deg;
} < / pre >

解决方案

你应该以正确的方式计算距离/角度:

  private   void  timer1_Tick( object  sender,EventArgs e)
{
_middle.X - = Convert.ToInt16(_interval * Math.Cos(radians / Rad2Deg));
_middle.Y - = Convert.ToInt16(_interval * Math.Sin(radians / Rad2Deg));

pictureBox1.Location = _middle;
}





Cos,Sin等正在使用弧度而不是度数...


Hi I want to move a picturebox along a line with timer. I have 2 point as start point and end point. The below code moves the picturebox but dont move along my line:

What I have tried:

<pre lang="C#">Point _start;
        Point _end;
        int _interval = 7;
        Point _middle;
        double radians;
        private void timer1_Tick(object sender, EventArgs e)
        {
            _middle.X -= Convert.ToInt16(_interval * Math.Cos(radians));
            _middle.Y -= Convert.ToInt16(_interval * Math.Sin(radians));

            pictureBox1.Location = _middle;
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            _start = pictureBox1.Location;
            _end = new Point(50, 50);
            _middle = _start;

            radians = (Angle(_start, _end) - 180) * -1;

            timer1.Enabled = true;
        }

        const double Rad2Deg = 180.0 / Math.PI;

        private double Angle(Point start, Point end)
        {
            return Math.Atan2(start.Y - end.Y, end.X - start.X) * Rad2Deg;
        }</pre>

解决方案

you should calculate the distances/angles in the right way :

private void timer1_Tick(object sender, EventArgs e)
 {
      _middle.X -= Convert.ToInt16(_interval * Math.Cos(radians / Rad2Deg));
    _middle.Y -= Convert.ToInt16(_interval * Math.Sin(radians / Rad2Deg));

    pictureBox1.Location = _middle;
  }



Cos, Sin and so on are working with radians and not with degrees ...


这篇关于沿着一条线移动一个图片框的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆