当前位置:首页 » 操作系统 » 中点椭圆算法

中点椭圆算法

发布时间: 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 浏览:945
安卓手机如何拍视频和苹果一样 发布: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