假設我有一個表單並在它上面畫一個橢圓。然後我想要控制一個控件(比如一個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