首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >动画基础数学

动画基础数学
EN

Stack Overflow用户
提问于 2011-05-17 15:17:22
回答 2查看 483关注 0票数 4

假设我有一个表格,并在上面画了一个椭圆形。然后,我想要获取一个控件(比如picturebox),并且(同时保持控件的左上角在直线上),我想沿着绘制的椭圆逐个像素地移动控件。

基本上,我想计算椭圆中每个位置/像素的上/左点。我知道这是一个基本的公式,但我永远也记不住它叫什么或者它是如何实现的。

有人愿意帮忙吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-05-17 16:14:18

代码语言:javascript
复制
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);
}

编辑:

现在,如果你想问为什么这样写它不能移动--你必须向它添加消息循环处理,形式如下:

代码语言:javascript
复制
Application.DoEvents();

您将把它放入循环中。

票数 4
EN

Stack Overflow用户

发布于 2011-05-17 15:59:02

椭圆规范形式:

代码语言:javascript
复制
x-x^2/a^2 + y^2/b^2 = 1

其中a =X半径,b =Y半径。因此,例如,如果您希望矩形的左上点位于椭圆的底部:

代码语言:javascript
复制
y = Sqrt((1-x^2/a^2)*b^2)

更新:要将椭圆移动到指定点XC,YC,请将每个x替换为(x-XC)(y-YC)。因此,如果您(在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...似乎是正确的)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6027508

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档