java椭圆 类_java 椭圆算法

展开全部

以下代码,将输出一个椭圆,再有问题,我可远程助你。如下:/**

*(300,100)(400,100)

*

*/

import java.awt.*;

import javax.swing.*;

import java.awt.event.*;

public class Lipse

{

public static void main(String[] args)

{

new MainFrame();

}

}

class MainFrame extends JFrame implements ActionListener

{

JPanel pane=new JPanel();

JTextField T_a,T_b;

JButton Draw,Show;

JLabel L_a,L_b;

int a,b;

MainFrame()

{

super("DrawLipse Window");

Container con=this.getContentPane();

con.setLayout(null);

pane.setBounds(20,20,850,550);

pane.setBackground(new Color(100,156,200));

con.add(pane);

L_a=new JLabel("请输入长半径:a");

L_a.setBounds(180,580,100,20);

con.add(L_a);

L_b=new JLabel("请输入短62616964757a686964616fe59b9ee7ad9431333335313731半径:b");

L_b.setBounds(180,630,100,20);

con.add(L_b);

T_a=new JTextField();

T_a.setBounds(300,580,50,20);

con.add(T_a);

T_b=new JTextField();

T_b.setBounds(300,630,50,20);

con.add(T_b);

Draw=new JButton("画椭圆");

Draw.setBounds(550,580,90,30);

Draw.addActionListener(this);

con.add(Draw);

Show=new JButton("显示坐标");

Show.setBounds(550,620,90,30);

Show.addActionListener(this);

con.add(Show);

this.addWindowListener(new CloseWindow());

this.setBounds(20,20,900,700);

this.setVisible(true);

this.setResizable(false);

}/*MainFrame()*/

public void actionPerformed(ActionEvent e)

{

if(e.getSource()==Draw)

{

a=Integer.parseInt(T_a.getText().trim());

b=Integer.parseInt(T_b.getText().trim());

Line line=new Line(this);

line.drawLipse(a,b);

}

if(e.getSource()==Show)

{

Graphics g1=this.pane.getGraphics();

g1.setColor(Color.PINK);

g1.drawLine(0,300,920,300);//----x---

g1.drawLine(410,0,410,720);//----y---

g1.dispose();

}

}/*method actionPerformed*/

}

class Line

{

MainFrame jb;

Line(MainFrame jb)

{

this.jb=jb;

}

public void drawLipse(int a,int b)

{

int x,y;

double d1,d2;

x=0;  y=b;

d1=b*b+a*a*(-b+0.25);

Graphics g=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)

{

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);

}// top of while

}catch(Exception e){}

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);

}/* bottom of while*/

}catch(Exception e){}

} /*DrawLipse*/

}

class CloseWindow extends WindowAdapter

{

public void windowClosing(WindowEvent e)

{

System.exit(0);

}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中实现点集拟合椭圆算法有多种,其中一种常用的算法是最小二乘法椭圆拟合算法。以下是一个简单的Java代码示例: ```java import org.apache.commons.math3.fitting.EllipseCurveFitter; import org.apache.commons.math3.fitting.WeightedObservedPoints; import org.apache.commons.math3.geometry.euclidean.twod.Vector2D; import org.apache.commons.math3.fitting.leastsquares.LeastSquaresOptimizer; import org.apache.commons.math3.fitting.leastsquares.LevenbergMarquardtOptimizer; public class EllipseFitting { public static void main(String[] args) { // 创建WeightedObservedPoints对象,用于存储点集数据 WeightedObservedPoints points = new WeightedObservedPoints(); // 添加点集数据 points.add(1.0, 2.0); points.add(2.0, 3.0); points.add(3.0, 4.0); // ... // 创建椭圆拟合器 EllipseCurveFitter fitter = EllipseCurveFitter.create(); // 使用最小二乘法进行拟合 LeastSquaresOptimizer.Optimum optimum = fitter.fit(points.toList()); // 获取拟合结果 double[] parameters = optimum.getPoint().toArray(); // 输出椭圆参数 double centerX = parameters; double centerY = parameters; double semiMajorAxis = parameters; double semiMinorAxis = parameters; double rotationAngle = parameters; System.out.println("CenterX: " + centerX); System.out.println("CenterY: " + centerY); System.out.println("SemiMajorAxis: " + semiMajorAxis); System.out.println("SemiMinorAxis: " + semiMinorAxis); System.out.println("RotationAngle: " + rotationAngle); } } ``` 这段代码使用了Apache Commons Math库中的椭圆拟合工具`EllipseCurveFitter`和`WeightedObservedPoints`。首先,我们创建一个`WeightedObservedPoints`对象,用于存储点集数据。然后,我们添加点集数据到`WeightedObservedPoints`对象中。接下来,我们创建一个椭圆拟合器`EllipseCurveFitter`,并使用最小二乘法进行拟合。最后,我们获取拟合结果,包括椭圆的中心坐标、长轴半径、短轴半径和旋转角度,并输出到控制台。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值