精华内容
下载资源
问答
  • MySQL存储过程计算K线均值以及Java绘制曲线
  • java绘制曲线

    万次阅读 2015-05-27 10:03:26
    JFreeChart chart = ChartFactory.createLineChart("历史记录曲线", //折线图名称 "时间", // 横坐标名称 "倾角(X轴、Y轴)", // 纵坐标名称 linedataset, // 数据 PlotOrientation.VERTICAL, // 水平显示图像...
    import javax.swing.JPanel;
    
    import org.jfree.chart.ChartFactory;
    import org.jfree.chart.ChartPanel;
    import org.jfree.chart.JFreeChart;
    import org.jfree.chart.axis.NumberAxis;
    import org.jfree.chart.plot.CategoryPlot;
    import org.jfree.chart.plot.PlotOrientation;
    import org.jfree.data.category.DefaultCategoryDataset;
    import org.jfree.ui.ApplicationFrame;
    import org.jfree.ui.RefineryUtilities;
    public class JFramechart extends ApplicationFrame {
    /**
      * 
      */
    private static final long serialVersionUID = 1L;
    public JFramechart(String s) {
       super(s);
       setContentPane(createDemoLine());
       this.pack();
       RefineryUtilities.centerFrameOnScreen(this);
       this.setVisible(true);
     // this.setDefaultCloseOperation(EXIT_ON_CLOSE);
     }
    //public static void main(String[] args) {
    //   JFramechart fjc = new JFramechart("折线图",);
    //   fjc.pack();
    //   RefineryUtilities.centerFrameOnScreen(fjc);
    //   fjc.setVisible(true);
    //  // fjc.setDefaultCloseOperation(HIDE_ON_CLOSE);
    //   }
    // 生成显示图表的面板
     public static JPanel createDemoLine() {
       JFreeChart jfreechart = createChart(createDataset());
       return new ChartPanel(jfreechart);
     }
    // 生成图表主对象JFreeChart
     public static JFreeChart createChart(DefaultCategoryDataset linedataset) {
       // 定义图表对象
       JFreeChart chart = ChartFactory.createLineChart("历史记录曲线", //折线图名称
         "时间", // 横坐标名称
         "倾角(X轴、Y轴)", // 纵坐标名称
         linedataset, // 数据
        PlotOrientation.VERTICAL, // 水平显示图像
         true, // include legend
         true, // tooltips
         false // urls
         );
       CategoryPlot plot = chart.getCategoryPlot();
       plot.setRangeGridlinesVisible(true); //是否显示格子线
       plot.setBackgroundAlpha(0.3f); //设置背景透明度
       NumberAxis rangeAxis = (NumberAxis)plot.getRangeAxis();
       rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
       rangeAxis.setAutoRangeIncludesZero(true);
       rangeAxis.setUpperMargin(0.20);
       rangeAxis.setLabelAngle(Math.PI / 2.0);
       return chart;
     }
    // 生成数据
     public static DefaultCategoryDataset createDataset() {
       DefaultCategoryDataset linedataset = new DefaultCategoryDataset();
       MyData md=new MyData();
       double x=md.getX();
       double y=md.getX();
       double t=md.getX();
       draw(x,y,t,linedataset);
       return linedataset;
     }
     public static DefaultCategoryDataset draw(double x,double y,double t,DefaultCategoryDataset linedataset){
    	 DefaultCategoryDataset lds = new DefaultCategoryDataset();
    	 String series1 = "倾角(X轴)";
    	   String series2 = "倾角(Y轴)";
    	   String series3 = "温度";
    	   // 横轴名称(列名称)
    	   String type1 = "1月";
    	   String type2 = "2月";
    	   String type3 = "3月";
    	   String type4="4月";
    	 lds=linedataset;
    	 lds.addValue(4.2, series1, type1);
    	   linedataset.addValue(x, series1, type2);
    	   linedataset.addValue(5.2, series1, type3);
    	   linedataset.addValue(3.9, series1, type4);
    	   linedataset.addValue(y, series2, type1);
    	   linedataset.addValue(5.2, series2, type2);
    	   linedataset.addValue(7.9, series2, type3);
    	   linedataset.addValue(t, series3, type1);
    	   linedataset.addValue(9.2, series3, type2);
    	   linedataset.addValue(8.9, series3, type3);
    	 return linedataset;
     }
    }

    展开全文
  • java曲线

    2011-10-27 22:28:46
    java绘制曲线java绘制曲线java绘制曲线java绘制曲线java绘制曲线java绘制曲线
  • java曲线绘制程序工程

    2011-06-16 09:53:27
    java曲线绘制程序工程 可以绘制 贝塞尔曲线 NURBS 曲线和其他很多曲线的源代码程序工程,你自己慢慢看吧!
  • 繁花曲线java绘制

    千次阅读 2018-10-28 10:42:47
    为更好解决繁花曲线绘制问题,由java编写进行输出动点轨迹方程的具体坐标,形成繁花曲线,其基本思路为 第一步:求小圆圆心坐标 小圆圆心的公转轨迹是一个半径为 r1- r2 的圆,求小圆圆心坐标,相当于是求半径为 ...

      为更好解决繁花曲线绘制问题,由java编写进行输出动点轨迹方程的具体坐标,形成繁花曲线,其基本思路为

    第一步:求小圆圆心坐标

    小圆圆心的公转轨迹是一个半径为 r1- r2 的圆,求小圆圆心坐标,相当于是求半径为 r1- r2 的圆上θ 弧度对应的点的坐标。

    圆上的点的坐标公式为:

    x = r * cos(θ), y = r * sin(θ)

    小圆圆心坐标为:( xa+ (r1 - r2) * cos(θ), ya + (r1 - r2) * sin(θ) )

    第二步:求小圆自转弧度

    设小圆自转弧度为α,小圆紧贴大圆运动,两者走过的路程相同,因此有:

    r1 *θ = r2 *α

    小圆自转弧度α = (r1 / r2) *θ

    第三步:求点C坐标

    点C相对小圆圆心B的公转轨迹是一个半径为 Rc 的圆,类似第一步,有:

    轨迹点C的坐标为:( xa+ rc* cos(θ), ya+ rc* sin(θ))

    其中,为简化模型,定义大圆圆心位于原点,即xa=ya=0;

     首先,先求内切圆中动点轨迹方程,由于题中给的条件是时间,因此设角速度为w,则弧度就应该等于wt,其中ra,rb,k由题意给出,可直接在程序修改,可得到一系列轨迹动点,进行绘图

    下面,对代码进行解释,首先,main内部有一个工具方法get_center_in_circle,对这个方法进行重写,当输入get_center_in_circle(double r,double radian_out,int i),三个参数时,返回的是小圆的轨迹点,double r为小圆圆心距大圆的距离,根据是内切圆还是外切圆可得不同的值 ,当是内切圆时r=ra-rb,外切圆时r=ra+rb,double radian_out 参数是大圆在一定时间下转过的弧度,int i是判断返回x坐标还是y坐标,为1时返回x,其余返回y。

    当输入get_center_in_circle(double ra,double rb,double radian_out,double xb,double yb,double rc)为6个参数时,返回的是动点的轨迹坐标,前三个参数是给出参数,double xb,double yb两个参数是通过上一个工具方法得到的参数,指的是小圆圆心的轨迹坐标,double rc参数由给出的比例系数确定rc=rb*k,指的是动点距小圆圆心的距离。

    main()函数里得到动点轨迹坐标后,将数据更新,进行循环:

    t++;

    radian_out=w*t;

    更新时间使绘图继续。

    package MathModeling;
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class InFindTrail {
    	
    	public static double ra=17.0;//大圆半径
    	
    	public static double rb=13.0;//小圆半径
    	
    	public static double k=0.5;//比例系数
    	
    	static double xa;//大圆坐标
    
    	double ya;//大圆坐标
        
    	static double xb;//小圆坐标
    
    	static double yb;//小圆坐标
    	
    	static double rc=rb*k;//绕点半径
    	
    	static double radian_out;//弧度
    	
    	static double w=1.0;//角速度
    	
    	static double t=1;//时间
    	
    	static double radian;//自转弧度
    	
    	static double[] c;//轨迹圆坐标
    
    	
    	/**
    	 * 第二题内切圆动点坐标计算,其中ra,rb,k可根据数据的不同进行更改,进而得到绘图数据
    	 * @param args
    	 */
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		double r=ra-rb;
    		int i=1;
    		radian_out=w*t;
    		ArrayList x=new ArrayList();
    		ArrayList y=new ArrayList();
    		while(i<=1000) {
    			xb=get_center_in_circle(r,radian_out,1);
    			yb=get_center_in_circle(r,radian_out,0);
    			c=  get_center_in_circle( ra, rb, radian_out, xb, yb, rc);
    			x.add(c[0]);
    			y.add(c[1]);
    			//更新参数
    			t++;
    			radian_out=w*t;
    			i++;
    		}
    		//遍历输出
    		for(Object o:x) {
    			System.out.println(o);
    		}
    		System.out.println("               \n");
    		for(Object l:y) {
    			System.out.println(l);
    		}
    	}
    	
    	/**
    	 * 小圆圆心轨迹方程
    	 * @param r
    	 * @param radian_out
    	 * @param i
    	 * @return
    	 */
    	private static double get_center_in_circle(double r,double radian_out,int i) {
    		
    		double xb,yb;
    		if(i==1) {
    			xb=r*(Math.cos(radian_out));
    			return xb;
    		}else {
    			yb=r*(Math.sin(radian_out));
    			return  yb;
    		}
    	}
    	
    	/**
    	 * 动点轨迹方程
    	 * @param ra
    	 * @param rb
    	 * @param radian_out
    	 * @param xb
    	 * @param yb
    	 * @param rc
    	 * @return
    	 */
    	private static double[] get_center_in_circle(double ra,double rb,double radian_out,double xb,double yb,double rc) {
    		
    		double radian;
    		radian=(ra/rb)*radian_out;
    		double[] cs =new double[2];
    		cs[0]=xb+rc*(Math.cos(radian));
    		cs[1]=yb+rc*(Math.sin(radian));
    		return cs;
    		
    		
    	}
    
    }

     当为外切圆时,r应该是ra+rb,其余过程不变,代入得轨迹方程

    package MathModeling;
    
    import java.util.ArrayList;
    
    public class OutFindTrail {
    	
        public static double ra=17.0;//大圆半径
    	
    	public static double rb=13.0;//小圆半径
    	
    	public static double k=0.5;//比例系数
    	
    	static double xa;//大圆坐标
    
    	double ya;//大圆坐标
        
    	static double xb;//小圆坐标
    
    	static double yb;//小圆坐标
    	
    	static double rc=rb*k;//绕点半径
    	
    	static double radian_out;//弧度
    	
        static double w=1.0;//角速度
    	
    	static double t=1;//时间
    	
    	static double radian;//自转弧度
    	
    	static double[] c;//轨迹圆坐标
    	
        /**
         * 第二题外切圆动点坐标计算,其中ra,rb,k可根据数据的不同进行更改,进而得到绘图数据
         * @param args
         */
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    
    		double r=ra+rb;
    		int i=1;
    		radian_out=t*w;
    		ArrayList x=new ArrayList();
    		ArrayList y=new ArrayList();
    		while(i<1000) {
    			xb=get_center_in_circle(r,radian_out,1);
    			yb=get_center_in_circle(r,radian_out,0);
    			c=  get_center_in_circle( ra, rb, radian_out, xb, yb, rc);
    			x.add(c[0]);
    			y.add(c[1]);
    			//更新参数
    			t++;
    			radian_out=t*w;
    			i++;
    		}
    		for(Object o:x) {
    			System.out.println(o);
    		}
    		System.out.println("               \n");
    		for(Object l:y) {
    			System.out.println(l);
    		}
    	}
    	
    	/**
    	 * 小圆圆心轨迹方程
    	 * @param r
    	 * @param radian_out
    	 * @param i
    	 * @return
    	 */
        private static double get_center_in_circle(double r,double radian_out,int i) {
    		
    		double xb,yb;
    		if(i==1) {
    			xb=r*(Math.cos(radian_out));
    			return xb;
    		}else {
    			yb=r*(Math.sin(radian_out));
    			return  yb;
    		}
    	}
    	
        /**
         * 动点轨迹方程
         * @param ra
         * @param rb
         * @param radian_out
         * @param xb
         * @param yb
         * @param rc
         * @return
         */
    	private static double[] get_center_in_circle(double ra,double rb,double radian_out,double xb,double yb,double rc) {
    		
    		double radian;
    		radian=(ra/rb)*radian_out;
    		double[] cs =new double[2];
    		cs[0]=xb+rc*(Math.cos(radian));
    		cs[1]=yb+rc*(Math.sin(radian));
    		return cs;
    		
    		
    	}
    
    
    }
    

     第三题,k前面的系数要乘以n*m*t,则通过计算可得,rc=rb*k,随着t的变大,动点会在小圆的某一个半径上朝着远离圆心的方向运动,其中会在一个临界点动点会超出大圆

    package MathModeling;
    
    import java.util.ArrayList;
    
    public class MoveInFindTrail {
    	
        public static double ra=111.0;//大圆半径
    	
    	public static double rb=22.0;//小圆半径
    	
    	public static double k=0.25;//比例系数
    	
    	static double xa;//大圆坐标
    
    	double ya;//大圆坐标
        
    	static double xb;//小圆坐标
    
    	static double yb;//小圆坐标
    	
    	static double n=0.25,m=0.01;
    	
    	static double t=1;//时间
    	
    	static double k2=k*n*m*t;//系数渐变
    	
    	static double rc=rb*k2;//绕点半径
    	
    	static double radian_out;//弧度
    	
    	static double w=1.0;//角速度
    	
    	static double radian;//自转弧度
    	
    	static double[] c;//轨迹圆坐标
    	
    	/**
    	 * 第三题对内切圆动点坐标的计算,其中ra,rb,k,n,m可根据数据的不同进行更改,进而得到绘图数据
    	 * @param args
    	 */
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		
    		double r=ra-rb;
    		int i=1;
    		radian_out=w*t;
    		ArrayList x=new ArrayList();//动点横坐标
    		ArrayList y=new ArrayList();//动点纵坐标
    		while(i<=1000) {
    			xb=get_center_in_circle(r,radian_out,1);
    			yb=get_center_in_circle(r,radian_out,0);
    			c=  get_center_in_circle( ra, rb, radian_out, xb, yb, rc);
    			x.add(c[0]);
    			y.add(c[1]);
    			//更新参数
    			t++;
    			radian_out=w*t;
    			k2=k*n*m*t;
    			rc=rb*k2;
    			i++;
    		}
    		//遍历输出
    		for(Object o:x) {
    			System.out.println(o);
    		}
    		System.out.println("               \n");
    		for(Object l:y) {
    			System.out.println(l);
    		}
    	}
    	
    	/**
    	 * 获得小圆圆心轨迹方程
    	 * @param r
    	 * @param radian_out
    	 * @param i
    	 * @return
    	 */
    	private static double get_center_in_circle(double r,double radian_out,int i) {
    		
    		double xb,yb;
    		if(i==1) {
    			xb=r*(Math.cos(radian_out));
    			return xb;
    		}else {
    			yb=r*(Math.sin(radian_out));
    			return  yb;
    		}
    	}
    	
    	/**
    	 * 获得动点轨迹方程
    	 * @param ra
    	 * @param rb
    	 * @param radian_out
    	 * @param xb
    	 * @param yb
    	 * @param rc
    	 * @return
    	 */
    	private static double[] get_center_in_circle(double ra,double rb,double radian_out,double xb,double yb,double rc) {
    		
    		double radian;
    		radian=(ra/rb)*radian_out;
    		double[] cs =new double[2];
    		cs[0]=xb+rc*(Math.cos(radian));
    		cs[1]=yb+rc*(Math.sin(radian));
    		return cs;
    		
    		
    	}
    
    }
    
    package MathModeling;
    
    import java.util.ArrayList;
    
    public class MoveOutFindTrail {
    
    	public static double ra=111.0;//大圆半径
    		
    	public static double rb=22.0;//小圆半径
    		
    	public static double k=0.25;//比例系数
    		
    	static double xa;//大圆坐标
    
    	double ya;//大圆坐标
    	    
    	static double xb;//小圆坐标
    
    	static double yb;//小圆坐标
    	
        static double n=0.25,m=0.01;
    	
    	static double t=1;//时间
    	
    	static double k2=k*n*m*t;//系数渐变
    		
    	static double rc=rb*k2;//绕点半径
    		
    	static double radian_out;//弧度
    		
    	static double w=1.0;//角速度
    			
    	static double radian;//自转弧度
    		
    	static double[] c;//轨迹圆坐标
    	
    	/**
    	 * 第三题对外切圆动点坐标的计算,其中ra,rb,k,n,m可根据数据的不同进行更改,进而得到绘图数据
    	 * @param args
    	 */
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    
    		double r=ra+rb;
    		int i=1;
    		radian_out=t*w;
    		ArrayList x=new ArrayList();//动点横坐标
    		ArrayList y=new ArrayList();//动点纵坐标
    		while(i<1000) {
    			xb=get_center_in_circle(r,radian_out,1);
    			yb=get_center_in_circle(r,radian_out,0);
    			c=  get_center_in_circle( ra, rb, radian_out, xb, yb, rc);
    			x.add(c[0]);
    			y.add(c[1]);
    			//更新参数
    			t++;
    			radian_out=w*t;
    			k2=k*n*m*t;
    			rc=rb*k2;
    			i++;
    		}
    		//遍历输出
    		for(Object o:x) {
    			System.out.println(o);
    		}
    		System.out.println("               \n");
    		for(Object l:y) {
    			System.out.println(l);
    		}
    	}
    	
    	/**
    	 * 获得小圆圆心轨迹方程
    	 * @param r
    	 * @param radian_out
    	 * @param i
    	 * @return
    	 */
    	 private static double get_center_in_circle(double r,double radian_out,int i) {
    			
    			double xb,yb;
    			if(i==1) {
    				xb=r*(Math.cos(radian_out));
    				return xb;
    			}else {
    				yb=r*(Math.sin(radian_out));
    				return  yb;
    			}
    		}
    	/**
    	 * 	获得动点轨迹方程
    	 * @param ra
    	 * @param rb
    	 * @param radian_out
    	 * @param xb
    	 * @param yb
    	 * @param rc
    	 * @return
    	 */
    	 private static double[] get_center_in_circle(double ra,double rb,double radian_out,double xb,double yb,double rc) {
    			
    			double radian;
    			radian=(ra/rb)*radian_out;
    			double[] cs =new double[2];
    			cs[0]=xb+rc*(Math.cos(radian));
    			cs[1]=yb+rc*(Math.sin(radian));
    			return cs;
    			
    			
    		}
    
    }
    

     为了绘制外侧的大圆,将大圆半径输入,用极坐标求解大圆轨迹点,形成大圆轨迹图

    package MathModeling;
    
    import java.util.ArrayList;
    
    /**
     * 为方便绘图,将大圆坐标点输出
     * @author Administrator
     *
     */
    public class Circle {
    	
    	public static double r=111;//圆半径
    	
    	public static double radian=0;//弧度
    
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    
    		ArrayList x=new ArrayList();
    		
    		ArrayList y=new ArrayList();
    		
    		for(int i=0;i<1000;i++) {
    			x.add(r*Math.cos(radian));
    			y.add(r*Math.sin(radian));
    			radian++;
    		}
    		//输出参数
    		for(Object o:x) {
    			System.out.println(o);
    		}
    		
    		System.out.println("\n");
    		
    		for(Object p:y) {
    			System.out.println(p);
    		}
    	}
    
    }
    

     

    展开全文
  • java绘制一个三维蝴蝶效应的applet程序,具有多线程功能
  • 绘制希尔伯特曲线 Hilbert Curve
    package test;
    import java.awt.*;
    import java.applet.*;
    
    public class HilbertCurve extends Applet {
        private SimpleGraphics sg=null;
        private int dist0=512, dist=dist0;
    
        public void init() {
            dist0 = 512;
            resize ( dist0, dist0 );
            sg = new SimpleGraphics(getGraphics());
        }
    
        public void paint(Graphics g) {
            int level=2;
            dist=dist0;
            for (int i=level;i>0;i--) dist /= 2;
            sg.goToXY ( dist/2, dist/2 );
            HilbertA(level); // 开始递归调用
        }
    
        private void HilbertA (int level) {
            if (level > 0) {
                HilbertB(level-1);    sg.lineRel(0,dist);//右
                HilbertA(level-1);    sg.lineRel(dist,0);//下
                HilbertA(level-1);    sg.lineRel(0,-dist);//左
                HilbertC(level-1);
            }
        }
    
        private void HilbertB (int level) {
            if (level > 0) {
                HilbertA(level-1);    sg.lineRel(dist,0);
                HilbertB(level-1);    sg.lineRel(0,dist);
                HilbertB(level-1);    sg.lineRel(-dist,0);
                HilbertD(level-1);
            }
        }
    
        private void HilbertC (int level) {
            if (level > 0) {
                HilbertD(level-1);    sg.lineRel(-dist,0);
                HilbertC(level-1);    sg.lineRel(0,-dist);
                HilbertC(level-1);    sg.lineRel(dist,0);
                HilbertA(level-1);
            }
        }
    
        private void HilbertD (int level) {
            if (level > 0) {
                HilbertC(level-1);    sg.lineRel(0,-dist);
                HilbertD(level-1);    sg.lineRel(-dist,0);
                HilbertD(level-1);    sg.lineRel(0,dist);
                HilbertB(level-1);
            }
        }
    }
    
    class SimpleGraphics {
        private Graphics g = null;
        private int x = 0, y = 0;
    
        public SimpleGraphics(Graphics g) { this.g = g; }
        public void goToXY(int x, int y) { this.x = x;   this.y = y; }
    
        public void lineRel(int deltaX, int deltaY) {
            g.drawLine ( x, y, x+deltaX, y+deltaY );
            x += deltaX;    y += deltaY;
        }
    }

    效果图:
    这里写图片描述

    展开全文
  • java类,通过运行dos命令,txt文件可以像exe一样运行,数据由随机数产生,可以动态的显示曲线,以循环的方式实现动态显示
  • java swing绘制正弦曲线

    2009-10-12 23:17:33
    一个用swing绘制sin曲线的小程序 供初学者借鉴借鉴
  • Java绘制科赫曲线(koch curve)

    千次阅读 2017-05-28 10:20:00
    保存Koch.java文件,和画图小乌龟Turtle.java文件即可 Koch.java public class Koch { public void draw(int n) { Turtle t = new Turtle(); t.move(10,200); t.penDown(); drawKoch(t, 300 ,n...



    保存Koch.java文件,和画图小乌龟Turtle.java文件即可




    Koch.java

    public class Koch {
        public void draw(int n) {
    	Turtle t = new Turtle();
    	t.move(10,200);
    	t.penDown();
    	drawKoch(t, 300 ,n);
           
        }
    
        public void drawKoch(Turtle t, double len, int n){
    	if (n < 1)  t.go(len);
    	else{
    	    // for (int a = 60; a <= 420; a += 180){
    	   
    	    for (int i = 0; i < 3; i++){
    		int a = 60 + 180*i;
    	
    		drawKoch(t, len / 3, n - 1);
    		t.rotate(a);
    	    }
    
    	    drawKoch(t, len / 3, n - 1);
    	}
        }
    
    	public static void main(String[] args) {
    	    Koch a = new Koch();
    	    for(int n = 1; n<=6; n++) 
    	    a.draw(n);
    	}
    }
    



    Turtle.java

    /* Turtle.java
     *
     * Copyright (C) 2004 by Shigeru Chiba,  All rights reserved.
     */
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import java.awt.Rectangle;
    import java.awt.image.BufferedImage;
    import java.util.Vector;
    import java.util.Iterator;
    
    class Pond extends JPanel {
        private BufferedImage bimg;
        private Vector turtles;     // must be atomic.
    
        private static final int WIDTH = 400;
        private static final int HEIGHT = 400;
    
        private Rectangle clipRegion;
    
        public Pond() {
            bimg = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB);
            Graphics pen = bimg.createGraphics();
            pen.setColor(Color.white);
            pen.fillRect(0, 0, WIDTH, HEIGHT);
            clipRegion = null;
            turtles = new Vector();
    
            JFrame app = new JFrame("Turtle");
            app.addWindowListener(new WindowAdapter() {
                    public void windowClosing(WindowEvent e) {
                        System.exit(0);
                    }
                });
    
            JMenu speed = new JMenu("Speed");
            ActionListener listener = new ActionListener() {
                    public void actionPerformed(ActionEvent e) {
                        String cmd = e.getActionCommand();
                        if (cmd.equals("extreme"))
                            Turtle.interval = 0;
                        else if (cmd.equals("very fast"))
                            Turtle.interval = Turtle.SLOW_INTERVAL / 10;
                        else if (cmd.equals("fast"))
                            Turtle.interval = Turtle.SLOW_INTERVAL / 2;
                        else
                            Turtle.interval = Turtle.SLOW_INTERVAL;
                    }
                };
    
            speed.add("slow").addActionListener(listener);
            speed.add("fast").addActionListener(listener);
            speed.add("very fast").addActionListener(listener);
            speed.add("extreme").addActionListener(listener);
    
            JMenuBar bar = new JMenuBar();
            bar.add(speed);
            app.setJMenuBar(bar);
            app.setSize(WIDTH, HEIGHT);
            app.setResizable(false);
            app.getContentPane().add(this);
            app.setVisible(true);
        }
    
        public void addTurtle(Turtle t) {
            turtles.add(t);
        }
    
        public Graphics makePen() {
            return bimg.createGraphics();
        }
    
        public synchronized void setClip(int x0, int y0, int margin) {
            Rectangle r = new Rectangle(x0 - margin, y0 - margin,
                                        margin * 2, margin * 2);
            if (clipRegion == null)
                clipRegion = r;
            else
                clipRegion.add(r);
        }
    
        public void partlyRepaint() {
            Rectangle r = clipRegion;
            clipRegion = null;
            if (r != null)
                repaint(r);
            else
                repaint();
        }
    
        public void paintComponent(Graphics g) {
            super.paintComponent(g);
            g.drawImage(bimg, 0, 0, this);
            Iterator i = turtles.iterator();
            while (i.hasNext()) {
                Turtle t = (Turtle)i.next();
                t.paint(g);
            }
        }
    }
    
    public class Turtle {
        static final int TURTLE_SIZE = 5;
        static final int SLOW_INTERVAL = 100;
        static int interval = SLOW_INTERVAL;
    
        private static final double STRIDE = 5.0;
        private static Pond pond = null;
    
        private Graphics pen;
        private double xpos, ypos;
        private int direction;
        private boolean penIsDown;
        private Color penColor;
    
        private static synchronized void makePond() {
            if (pond == null)
                pond = new Pond();
        }
    
        public Turtle() {
            makePond();
            pond.addTurtle(this);
            pen = pond.makePen();
            xpos = ypos = 0.0;
            direction = 0;
            penIsDown = false;
            penColor = Color.blue;
        }
    
        private void repaint() {
            pond.partlyRepaint();
        }
    
        void paint(Graphics g) {
            g.setColor(Color.black);
            g.drawOval((int)xpos - TURTLE_SIZE, (int)ypos - TURTLE_SIZE,
                       TURTLE_SIZE * 2, TURTLE_SIZE * 2);
        }
    
        public void penDown() { penIsDown = true; }
    
        public void penUp() { penIsDown = false; }
    
        public boolean isDown() { return penIsDown; }
    
        public void setColor(Color c) { penColor = c; }
    
        public void setDirection(double d) { direction = (int)d; }
    
        public void setDirection(int d) { direction = d; }
    
        public synchronized void rotate(int r) {
            direction = (direction + r) % 360;
        }
    
        public void rotate(double r) { rotate((int)r); }
    
        public void go(int distance) {
            go((double)distance);
        }
    
        public void go(double distance) {
            double x = xpos;
            double y = ypos;
            if (direction == 0)
                x += distance;
            else if (direction == 90)
                y -= distance;
            else if (direction == 180)
                x -= distance;
            else if (direction == 270)
                y += distance;
            else {
                double r = direction * Math.PI * 2.0 / 360.0;
                x = xpos + distance * Math.cos(r);
                y = ypos - distance * Math.sin(r);
            }
    
            move(x, y);
        }
    
        public void move(int x, int y) {
            move((double)x, (double)y);
        }
    
        public synchronized void move(double x, double y) {
            if (penIsDown) {
                pen.setColor(penColor);
                double x2 = xpos - x;
                double y2 = ypos - y;
                int step;
                if (interval > 0) {
                    step = (int)(Math.sqrt(x2 * x2 + y2 * y2) / STRIDE);
                    if (step < 2)
                        step = 2;
                }
                else
                    step = 1;
    
                for (int i = step - 1; i >= 0; --i) {
                    double xx = x + x2 * i / step;
                    double yy = y + y2 * i / step;
                    pond.setClip((int)xpos, (int)ypos, TURTLE_SIZE + 2);
                    pond.setClip((int)xx, (int)yy, TURTLE_SIZE + 2);
                    pen.drawLine((int)xpos, (int)ypos, (int)xx, (int)yy);
                    xpos = xx;
                    ypos = yy;
                    repaint();
                    if (i > 0 && interval > 0)
                        try {
                            Thread.sleep(interval);
                        }
                        catch (InterruptedException e) {}
                }
            }
            else
                if (interval > 0)
                    try {
                        Thread.sleep(interval / 2);
                    }
                    catch (InterruptedException e) {}
    
            pond.setClip((int)xpos, (int)ypos, TURTLE_SIZE + 2);
            xpos = x;
            ypos = y;
            pond.setClip((int)x, (int)y, TURTLE_SIZE + 2);
            repaint();
        }
    
        public synchronized void print(String text) {
            pen.setColor(penColor);
            pen.drawString(text, (int)xpos, (int)ypos);
            repaint();
        }
    }
    
    


    展开全文
  • 从网上获得的资料,感觉很好,分享一下! 从网上获得的资料,感觉很好,分享一下! 从网上获得的资料,感觉很好,分享一下! 从网上获得的资料,感觉很好,分享一下!
  • JAVA Applet——绘制心形曲线

    千次阅读 2018-10-09 15:34:00
    绘制心形曲线 1.要求 非常有名的笛卡尔曲线数学公式:(x2+y2−2ax)2=4a2(x2+y2)(x^{2}+y^{2}-2ax)^{2}=4a^{2}(x^{2}+y^{2})(x2+y2−2ax)2=4a2(x2+y2) 即心形曲线,本例通过Applet绘制出笛卡尔曲线。 2....
  • 部分与整体以某种形式相似的形,称为分形,科赫曲线是一种外形像雪花的几何曲线,所以又称为雪花曲线,它是分形曲线中的一种,画法如下
  • 实现JSON传输数据并根据接收到的数据绘制曲线图。
  • [img]http://dl.iteye.com/upload/attachment/285421/2efbfef8-c872-31e2-aa30-256b4b363d9c.jpg[/img]... import java.awt.*; import java.applet.*; public class CartesianCurve extends Applet{ int w...
  • Java中没有自带正弦曲线的函数,需要自己绘制。 用无数个小线段来组成弯曲的正弦曲线。 定义三个变量: ` int grain = 3; //控制正弦曲线的粒度(粒度越大,像素越低) int range = 50; //高度 int period = 100; ...
  • 此demo不需要借助其他插件,只需要加入poi相关的jar即可生成excel表格数据曲线,附件是源码
  • Java生成曲线

    2020-12-07 04:00:42
    Java 曲线图 jfreechart。 含jar包,直接运行,注释全。 Java 曲线图 jfreechart。 含jar包,直接运行,注释全。
  • POI绘制曲线

    千次阅读 2018-09-30 16:18:38
    背景:网上找了很多excel绘制表格曲线,但是大多方法过于复杂,且不太实用,所以查找了很多资料,最终找到POI可以绘制曲线,废话不多说,直接上图上代码 public void CreateGraph(String dataPath, String ...
  • 有一组数据,如何根据这组数据绘制出动态的曲线,就是画出的曲线能从左到右的慢慢动,然后到了右面,超出的部分又自己消失,希望有大神给点儿源码
  • Java绘制函数图像

    2015-10-31 17:27:49
    Java刚开始学习,根据JFrame和JPanel以及Math类编写的小程序,抛砖引玉
  • GNUPlot绘制曲线

    千次阅读 2014-11-08 09:23:08
    发现gnuplot在mac上编译安装相当方便,在线下为了测试java老堆和lucene索引大小,需要绘制两条线,但是直接点连的线非常难看,所以后面使用贝塞尔曲线。 脚本如下: #! /usr/local/bin/gnuplot -p set ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 12,190
精华内容 4,876
关键字:

java绘制曲线

java 订阅