java 椭圆算法

java 椭圆算法,第1张

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

/**

 *(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("请输入短半径: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)<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)

         }// 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)

 }

}

#include<stdio.h>

#include<graphics.h>

#include<math.h>

#include<time.h>

#include<conio.h>

void ellipsepoint(int x,int y,int value,int rx,int ry)

{

putpixel((int)rx+x,(int)ry+y,value)

putpixel((int)rx-x,(int)ry+y,value)

putpixel((int)rx+x,(int)ry-y,value)

putpixel((int)rx-x,(int)ry-y,value)

}

void MidPointEllipse(int a,int b,int value,int rx,int ry)

{

long x=0

long y=b

long sa=a*a,sb=b*b

long xp=(long)((float)sa/(float)sqrt((float)(sa+sb)))

long yp=(long)((float)sb/(float)sqrt((float)(sa+sb)))

long d=sb-sa*(b-0.25)

ellipsepoint(x,y,value,0,0)

while(x<xp)

{

if(d<0)

{d+=sb*(2*x+3)

x++ }

else

{

d+=sb*(2*x+3)+sa*(-2*y+2)

x++

y--

}

ellipsepoint(x,y,value,rx,ry)

}

x=ay=0d=4*sa+sb-4*a*sb

while(y<yp)

{

if(d<0)

{

d+=sa*(2*y+3)

y++

}

else

{

d+=sa*(2*y+3)+sb*(2-2*x)

y++

x--

}

ellipsepoint(x,y,value,rx,ry)

}

}

int main()

{

int gdriver,gmode

gdriver=VGA

gmode=VGAHI

registerbgidriver(EGAVGA_driver)

initgraph(&gdriver,&gmode,"")

MidPointEllipse(50,30,5,100,100)

getch()

closegraph()

return 0

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7846445.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-10
下一篇 2023-04-10

发表评论

登录后才能评论

评论列表(0条)

保存