动画的基本数学

时间:2011-05-17 07:17:22

标签: c# .net animation graphics geometry

假设我有一个表格并在上面涂上一个椭圆形。然后,我想要一个控件(如图片框)和(同时保持控件的左上角完全在线上)我想在绘制的椭圆后按像素移动控件。

基本上我想计算椭圆中每个位置/像素的上/下点。我知道它是一个基本的公式,但是对于我的生活不能记住它的所谓或它的成就。

有人愿意帮忙吗?

Example

2 个答案:

答案 0 :(得分:4)

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 :(得分:1)

Ellipse规范形式:

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 ......似乎是正确的)