J2SE 利用Java函数画曲线

给大家介绍几个方法画数学上的三角函数的方法:
public class Function extends JFrame {
	private static final double WIDTH = Toolkit.getDefaultToolkit().getScreenSize().getWidth();
	private static final double HEIGHT = Toolkit.getDefaultToolkit().getScreenSize().getHeight();
	private static final int INCREMENT = 20;
	
	public static void main(String[] args) {
		new Function();
	}
	
	public Function() {
		this.setTitle("画图像sinx/x");
		this.setLocation(50, 50);
		this.setVisible(true);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.getContentPane().setBackground(Color.BLUE);
		this.setExtendedState(JFrame.MAXIMIZED_BOTH);
	}
	
	@Override
	public void paint(Graphics g) {
		super.paint(g);
		Graphics2D g2d = (Graphics2D) g;
		Color source = g2d.getColor();
		
		g2d.setColor(Color.WHITE);
		g2d.drawString("sinx/x 的图像", 50, 50);
		

		// 画 X 轴
		g2d.drawLine(INCREMENT, (int)HEIGHT/2, (int)WIDTH-INCREMENT, (int)HEIGHT/2);
		g2d.drawLine((int)WIDTH-INCREMENT, (int)HEIGHT/2, (int)WIDTH-10, (int)HEIGHT/2-5);
		g2d.drawLine((int)WIDTH-INCREMENT, (int)HEIGHT/2, (int)WIDTH-10, (int)HEIGHT/2+5);
		

		// 画 Y 轴
		g2d.drawLine((int)WIDTH/2, 40, (int)WIDTH/2, (int)HEIGHT-50);
		g2d.drawLine((int)WIDTH/2, 40, (int)WIDTH/2-10, 50);
		g2d.drawLine((int)WIDTH/2, 40, (int)WIDTH/2+10, 50);
		
		// 将当前画笔移动到中心
		g2d.translate((int) WIDTH / 2, (int) HEIGHT / 2);

		// 利用GeneralPath类来画曲线
		GeneralPath gp = new GeneralPath();

		// 将GeneralPath的实例gp的画笔移动到当前画面的中心,但是这个点是相对于g2d画笔的中心的
		gp.moveTo(0, 0);

		// 画sin(x)/x 的图像
//		drawSinxDX(gp, g2d);

		// sin(x)的图像
		drawSinx(gp, g2d);

		// cos(x)的图像
//		drawCosx(gp, g2d);

		// tan(x)的图像
//		drawTanx(gp, g2d);
		g2d.setColor(source);
	}

	private void drawTanx(GeneralPath gp, Graphics2D g2d) {
		for (double i = 0.000001; i <= 8*Math.PI; i+=0.0001*Math.PI) {
			gp.lineTo(20*i, 100*-Math.tan(i));
		}
		g2d.draw(gp);

		// 将当前画笔以原点为中心,旋转180度,画奇函数(关于原点对称)
		g2d.rotate(Math.PI);
		g2d.draw(gp);
	}

	private void drawCosx(GeneralPath gp, Graphics2D g2d) {
		for (double i = 0.000001; i <= 8*Math.PI; i+=0.0001*Math.PI) {
			gp.lineTo(20*i, 100*-Math.cos(i));
		}
		g2d.draw(gp);

		// 将当前画笔以Y中为对称轴,画偶函数(关于Y轴对称)
		g2d.scale(-1, 1);
		g2d.draw(gp);
	}
	private void drawSinx(GeneralPath gp, Graphics2D g2d) {
		for (double i = 0.000001; i <= 8*Math.PI; i+=0.0001*Math.PI) {
        	  gp.lineTo(20*i, 100*-Math.sin(i));
        	}
		g2d.draw(gp);
		g2d.rotate(Math.PI);
		g2d.draw(gp);
	}

	private void drawSinxDX(GeneralPath gp, Graphics2D g) {
		for (double i = 0.000001; i <= 8*Math.PI; i+=0.0001*Math.PI) {
        	 gp.lineTo(20*i, 100*-Math.sin(i)/i);
         	}
		g.draw(gp);
		g.scale(-1, 1);
		g.draw(gp);
	}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值