當前位置:首頁 » 操作系統 » 中點橢圓演算法

中點橢圓演算法

發布時間: 2023-04-03 04:06:12

『壹』 java 橢圓演算法

以下代碼,將輸出一個橢圓,再有問題,我可遠程助你。如下:

/**
*(300,100)(400,100)
*
*/
importjava.awt.*;
importjavax.swing.*;
importjava.awt.event.*;
publicclassLipse
{
publicstaticvoidmain(String[]args)
{
newMainFrame();
}
}

{
JPanelpane=newJPanel();
JTextFieldT_a,T_b;
JButtonDraw,Show;
JLabelL_a,L_b;
inta,b;
MainFrame()
{
super("DrawLipseWindow");
Containercon=this.getContentPane();
con.setLayout(null);

pane.setBounds(20,20,850,550);
pane.setBackground(newColor(100,156,200));
con.add(pane);

L_a=newJLabel("請輸入長半徑:a");
L_a.setBounds(180,580,100,20);
con.add(L_a);

L_b=newJLabel("請輸入短半徑:b");
L_b.setBounds(180,630,100,20);
con.add(L_b);


T_a=newJTextField();
T_a.setBounds(300,580,50,20);
con.add(T_a);

T_b=newJTextField();
T_b.setBounds(300,630,50,20);
con.add(T_b);

Draw=newJButton("畫橢圓");
Draw.setBounds(550,580,90,30);
Draw.addActionListener(this);
con.add(Draw);

Show=newJButton("顯示坐標");
Show.setBounds(550,620,90,30);
Show.addActionListener(this);
con.add(Show);

this.addWindowListener(newCloseWindow());
this.setBounds(20,20,900,700);
this.setVisible(true);
this.setResizable(false);

}/*MainFrame()*/
publicvoidactionPerformed(ActionEvente)
{
if(e.getSource()==Draw)
{
a=Integer.parseInt(T_a.getText().trim());
b=Integer.parseInt(T_b.getText().trim());
Lineline=newLine(this);
line.drawLipse(a,b);
}
if(e.getSource()==Show)
{
Graphicsg1=this.pane.getGraphics();
g1.setColor(Color.PINK);
g1.drawLine(0,300,920,300);//----x---
g1.drawLine(410,0,410,720);//----y---
g1.dispose();
}

}/*methodactionPerformed*/
}
classLine
{
MainFramejb;
Line(MainFramejb)
{
this.jb=jb;
}
publicvoiddrawLipse(inta,intb)
{
intx,y;
doubled1,d2;
x=0;y=b;
d1=b*b+a*a*(-b+0.25);
Graphicsg=jb.pane.getGraphics();
g.setColor(Color.red);
g.drawLine(x+410,y+300,x+410,y+300);
g.drawLine(-x+410,-y+300,-x+410,-y+300);
g.drawLine(-x+410,y+300,x+410,-y+300);
g.drawLine(x+410,-y+300,x+410,-y+300);
try
{
while(b*b*(x+1)<a*a*(y-0.5))
{
if(d1<=0)
{
d1+=b*b*(2*x+3);
x++;
}
else
{
d1+=(b*b*(2*x+3)+a*a*(-2*y+2));
x++;
y--;
}
g.drawLine(x+410,y+300,x+410,y+300);
g.drawLine(-x+410,-y+300,-x+410,-y+300);
g.drawLine(-x+410,y+300,x+410,-y+300);
g.drawLine(x+410,-y+300,x+410,-y+300);
Thread.sleep(30);
}//topofwhile
}catch(Exceptione){}

d2=b*b*(x+0.5)*(x+0.5)+a*a*(y-1)*(y-1)-a*a*b*b;
try
{
while(y>0)
{
if(d2<=0)
{
d2+=b*b*(2*x+2)+a*a*(-2*y+3);
x++;
y--;
}
else
{
d2+=a*a*(-2*y+3);
y--;
}
g.drawLine(x+410,y+300,x+410,y+300);
g.drawLine(-x+410,-y+300,-x+410,-y+300);
g.drawLine(-x+410,y+300,x+410,-y+300);
g.drawLine(x+410,-y+300,x+410,-y+300);
Thread.sleep(30);
}/*bottomofwhile*/

}catch(Exceptione){}

}/*DrawLipse*/

}

{
publicvoidwindowClosing(WindowEvente)
{
System.exit(0);
}
}

『貳』 橢圓的計算公式

S=π(圓周率)×a×b(其中a,b分別是橢圓的半長軸,半短軸的長),或S=π(圓周率)×A×B/4(其中A,B分別是橢圓的長軸,短軸的長)。

橢圓周長計算公式:L=T(r+R)。

T為橢圓系數,可以由r/R的值,查表找出系數T值;r為橢圓短半徑;R為橢圓長半徑。

橢圓周長定理:橢圓的周長等於該橢圓短半徑與長半徑之和與該橢圓系數的積(包括正圓)。

關於橢圓的周長等於特定的正弦曲線在一個周期內的長度的證明:

半徑為r的圓柱上與一斜平面相交得到一橢圓,該斜平面與水平面的夾角為α,截取一個過橢圓短徑的圓。以該圓和橢圓的某一交點為起始轉過一個θ角。則橢圓上的點與圓上垂直對應的點的高度可以得到f(c)=r tanα sin(c/r)。

r:圓柱半徑;

α:橢圓所在面與水平面的角度;

c:對應的弧長(從某一個交點起往某一個方向移動);

以上為證明簡要過程,則橢圓(x*cosα)^2+y^2=r^2的周長與f(c)=r tanα sin(c/r)的正弦曲線在一個周期內的長度是相等的,而一個周期T=2πr,正好為一個圓的周長。


(2)中點橢圓演算法擴展閱讀:

橢圓是圍繞兩個焦點的平面中的曲線,使得對於曲線上的每個點,到兩個焦點的距離之和是恆定的。

因此,它是圓的概括,其是具有兩個焦點在相同位置處的特殊類型的橢圓。橢圓的形狀(如何「伸長」)由其偏心度表示,對於橢圓可以是從0(圓的極限情況)到任意接近但小於1的任何數字。

橢圓是封閉式圓錐截面:由錐體與平面相交的平面曲線。橢圓與其他兩種形式的圓錐截面有很多相似之處:拋物線和雙曲線,兩者都是開放的和無界的。圓柱體的橫截面為橢圓形,除非該截面平行於圓柱體的軸線。

橢圓也可以被定義為一組點,使得曲線上的每個點的距離與給定點(稱為焦點)的距離與曲線上的相同點的距離的比值給定行(稱為directrix)是一個常數。該比率稱為橢圓的偏心率。

也可以這樣定義橢圓,橢圓是點的集合,點其到兩個焦點的距離的和是固定數。

熱點內容
內置存儲卡可以拆嗎 發布:2025-05-18 04:16:35 瀏覽:336
編譯原理課時設置 發布:2025-05-18 04:13:28 瀏覽:378
linux中進入ip地址伺服器 發布:2025-05-18 04:11:21 瀏覽:612
java用什麼軟體寫 發布:2025-05-18 03:56:19 瀏覽:32
linux配置vim編譯c 發布:2025-05-18 03:55:07 瀏覽:107
砸百鬼腳本 發布:2025-05-18 03:53:34 瀏覽:944
安卓手機如何拍視頻和蘋果一樣 發布:2025-05-18 03:40:47 瀏覽:742
為什麼安卓手機連不上蘋果7熱點 發布:2025-05-18 03:40:13 瀏覽:803
網卡訪問 發布:2025-05-18 03:35:04 瀏覽:511
接收和發送伺服器地址 發布:2025-05-18 03:33:48 瀏覽:372