沿着一条线移动一个图片框 [英] Move a picturebox along a line
本文介绍了沿着一条线移动一个图片框的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
嗨
我想用计时器沿着一条线移动一个图片框。我有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屋!
查看全文