假设我有一个表单并在它上面画一个椭圆。然后我想要控制一个控件(比如一个picturebox)和(当控件的左上角恰好在线上时),我想要按照绘制的椭圆一个像素地移动控件像素。动画的基本数学
基本上我想计算我的椭圆形中每个位置/像素的顶/左点。我知道它的一个基本公式,但不能记住我的生活,记住它的所谓或它的成就。
有人帮忙吗?
假设我有一个表单并在它上面画一个椭圆。然后我想要控制一个控件(比如一个picturebox)和(当控件的左上角恰好在线上时),我想要按照绘制的椭圆一个像素地移动控件像素。动画的基本数学
基本上我想计算我的椭圆形中每个位置/像素的顶/左点。我知道它的一个基本公式,但不能记住我的生活,记住它的所谓或它的成就。
有人帮忙吗?
double step=1.0; // how fast do you want it to move
double halfWidth=100.0; // width of the ellipse divided by 2
double halfHeight=50.0; // height of the ellipse divided by 2
for (double angle=0; angle<360; angle+=step)
{
int x=(int)halfWidth * Math.Cos(angle/180*Math.PI);
int y=(int)halfHeight * Math.Sin(angle/180*Math.PI);
pictureBox.TopLeft=new Point(x,y);
}
编辑:现在
,如果你即将问为什么不将其移动,如果你把它写这样的 - 你必须消息循环处理添加到它,在形式:
Application.DoEvents();
,您将在循环内放置。
+1为了简单和可读性 – Dve 2011-05-17 08:16:32
@DVE - 自从83年ZX Spectrum开始,这是我的第一个'程序':) – 2011-05-17 08:18:32
想要修复你的代码,我将它标记为答案? Math.Cos(X/180 * Math.PI);和Math.Sin(y/180 * Math.PI);是错误的(我认为你的意思是宽度和高度????)以及x的双重声明。 – 2011-05-18 03:53:31
椭圆规范形式:
x-x^2/a^2 + y^2/b^2 = 1
其中a
= Xradius和b
= YRadius为。因此,举例来说,如果你想有一个矩形上的椭圆形的底侧左上点:
y = Sqrt((1-x^2/a^2)*b^2)
UPD:为椭圆移动到指定的点XC,YC
,用(x-XC)
和(y-YC)
替换每个x。所以,如果你在绘制一个矩形的椭圆(在C#),所以XC = rect.X + a
YC = rect.Y + b
和最终的公式y = Sqrt((1 - Pow(x - rect.X - rect.Width/2, 2) * Pow(rect.Height/2, 2)) + rect.Y + rect.Height/2
......似乎是正确的)
不是你的确切问题,但关闭:http://stackoverflow.com/questions/2781206/finding-a-point-on-an-ellipse-circumference-which-is-inside-a-rectangle-having-ce – ChrisWue 2011-05-17 07:22:57
是的,它完全解决了! – 2011-05-17 14:37:05