精华内容
下载资源
问答
  • 函数图像生成器 [基于JAVA的图像生成器设计与实现]
    千次阅读
    2021-03-08 21:31:21

    摘要:Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言。Java技术具有卓越的通用性、高效性、平台移植性和安全性。该文基于JAVA语言,在介绍JAVA概念的基础上,实现了图像生成器的简单设计,通过运行程序,可以绘制各种图形,并且可以对图形进行预览、保存等操作。

    关键词:JAVA;面向对象;图像生成

    中图分类号:TP311文献标识码:A文章编号:1009-3044(2012)20-4889-03

    JAVA-based Image Generator Design and Implementation

    WANG Fei, HOU Wei-dong

    (The Baicheng Medical College, Baicheng 137000,China)

    Abstract: Java is a cross-platform application software can write object-oriented programming language. Java technology offers excellent versatility, efficiency, platform portability, and security. This paper is based on the JAVA programming language, introduced the JAVA con cept to achieve a simple design of the image generator to run the program, you can draw a variety of graphics and graphics preview, save, and other operations.

    Key words: JAVA; object-oriented; image generation

    1 JAVA概述

    Java是一种完全面向对象的编程语言,既是一种解释执行的语言,也是一种编译执行的语言。Java可用来生成两类程序:应用程序、小应用程序(Applet)。JAVA主要具有几个特点:

    1)简单:屏弃了C++中许多容易出错和混淆的概念,比如指针、运算符重载、多重继承等。Java还通过实现自动垃圾回收机制而大大简化了程序设计人员对内存的管理工作,减少了错误的发生。

    2)面向对象:基于对象的编程更符合人的思维模式,使人们更容易编写程序。

    3)多线程:Java内置了对多线程的支持。多线程使应用程序能够并行执行,而且同步机制保证了对共享数据的正确操作。

    4)平台无关性:也就是常说的跨平台。Java程序被编译成字节码的形式,在有Java虚拟机的系统上就能够运行java程序。也就是一次写成,处处运行。

    5)动态性:Java的基本组成单元是类,有些类是自己编写的,有些是从类库中引入的,而类又是运行时动态加载的,这就使得Ja va可以在分布计算功能中动态的维护程序及类库,而不像C++那样,每当类库升级之后,相应的程序都必须重新修改,编译。

    Java和C++的区别主要有以下几点:1)Java屏弃了烦琐的指针;2)Java不支持预处理功能;3)Java不支持多重继承;4)Java不支持操作符重载;5)自动内存管理;6)方便的字符串功能;7)强大的异常处理机制。

    2设计内容

    该文基于JAVA语言,在介绍JAVA概念的基础上,实现了图像生成器的简单设计。图像生成器具有绘制直线、空心圆、实心圆、空心矩形、实心矩形、空心圆角矩形、实心圆角矩形、空心椭圆、实心椭圆等各种图形,具有橡皮擦、选择线条粗细及线条颜色在当前光标处插入文字、设置字号字形等工具,可以打开、保存、预览图形文件,获取当前屏幕在绘图区域显示,可以设置窗口的风格,状态栏上显示当前鼠标的位置及系统当前时间。

    通过设计,可以达到几下要求:

    1)用户可选择对应图形按钮绘制对应图形也可以随意画,可以任意改变线条的粗细及线条颜色,插入自己满意的字号字形的文字,画好后可以保存为.MP文件。

    2)对于自己画错或不满意的地方可以用橡皮擦擦除,橡皮擦的擦拭范围的宽窄可以改变。

    3)可以打开及保存MP文件、预览图形文件。

    4)通过选择相应的窗口风格选项来改变当前窗口的显示风格。

    5)通过视图工具栏的工具栏的相应选取项来控制常用工具栏、绘图工具栏及状态栏的显示与否。

    6)可以获取屏幕的内容在当前绘图区域显示。

    3总体设计

    3.1图像生成器窗体的设计

    在设计的Making picture窗口中使用的是BorderLayout布局菜单栏上有文件、视图、设置、风格、帮助菜单项。在菜单项下是常用工具栏,常用工具栏上有新建、打开、保存、获取屏幕、清除、绘制图形、插入文字及文字的字号、字形的按钮,窗口的左边是绘图工具栏,上面有铅笔、直线、、空心圆、实心圆、空心矩形、实心矩形、空心圆角矩形、实心圆角矩形、空心椭圆、实心椭圆、橡皮擦、选择线条粗细及线条颜色的按钮,窗口最下面是状态栏,状态栏的左边显示当前鼠标的状态和位置,右边显示系统当前时间。鼠标指到常用工具栏和绘图工具栏上的相就按钮上时有相应的提示。窗口中间是绘图区域以白色为背景。

    3.2相应功能设计

    4程序主要源代码及说明

    因篇幅有限,截取部分源代码如下:

    class Line extends drawings //直线类

    {void draw(Graphics2D g2d)

    {g2d.setPaint(new Color(R,G,B));

    更多相关内容
  • Java绘制函数图像

    2015-10-31 17:27:49
    Java刚开始学习,根据JFrame和JPanel以及Math类编写的小程序,抛砖引玉
  • * 这是一个简单的函数显示工具,用户输入简单函数,程序自动函数图像,有着完整的注释,十分容易理解 * 支持常数e, sin, cos, tan, ln, ^, 加减乘除括号以及它们的复合运算 * 只能有一个变量,而且必须是x,...
  • 怎么用java绘制函数图像

    千次阅读 2021-02-12 21:47:01
    import java.awt.BorderLayout;import java.awt.Dimension;import java.awt.GridLayout;import java.awt.Toolkit;import javax.swing.ButtonGroup;import javax.swing.JButton;import javax.swing....

    展开全部

    package math;

    import java.awt.BorderLayout;

    import java.awt.Dimension;

    import java.awt.GridLayout;

    import java.awt.Toolkit;

    import javax.swing.ButtonGroup;

    import javax.swing.JButton;

    import javax.swing.JComboBox;

    import javax.swing.JFrame;

    import javax.swing.JLabel;

    import javax.swing.JPanel;

    import javax.swing.JRadioButton;

    import javax.swing.JTextField;

    public class UI extends JFrame

    {

    MyPanel mp;

    JPanel pl = new JPanel();

    JPanel pl1 = new JPanel(),

    pl2 = new JPanel(),

    pl3 = new JPanel(),

    pl4 = new JPanel();

    JRadioButton rb1,rb2;

    ButtonGroup bg = new ButtonGroup();

    JTextField tf = new JTextField(16);

    String[] s = {"y = sin(x)", "y = cos(x)", "y = tan(x)",

    "y = pow(x, 2)", "y = pow(x, 3)", "y = log(x)",

    "y = pow(2, x)", "y = sqrt(x)", "r = a(sita)"};

    JComboBox cb;

    JButton bn1 = new JButton("变宽"),

    bn2 = new JButton("变窄"),

    bn3 = new JButton("拉长"),

    bn4 = new JButton("压短"),

    bn = new JButton("绘图"),

    exit = new JButton("退出"),

    bn5 = new JButton("左移"),

    bn6 = new JButton("右移"),

    bn7 = new JButton("上移"),

    bn8 = new JButton("下移");

    public UI()

    {

    mp = new MyPanel(this);

    pl1.setLayout(new GridLayout(1, 2));

    pl2.setLayout(new GridLayout(1, 2));

    pl3.setLayout(new GridLayout(1, 2));

    pl4.setLayout(new GridLayout(1, 2));

    pl1.add(bn1); bn1.setEnabled(false);

    pl1.add(bn2); bn2.setEnabled(false);

    pl2.add(bn3); bn3.setEnabled(false);

    pl2.add(bn4); bn4.setEnabled(false);

    pl3.add(bn5); bn5.setEnabled(false);

    pl3.add(bn6); bn6.setEnabled(false);

    pl4.add(bn7); bn7.setEnabled(false);

    pl4.add(bn8); bn8.setEnabled(false);

    pl.setLayout(new GridLayout(20, 1));

    rb1 = new JRadioButton("输入函数");

    rb2 = new JRadioButton("选择已有函数");

    rb2.setSelected(true);

    tf.setEnabled(false);

    bg.add(rb1); bg.add(rb2);

    rb1.addActionListener(mp);

    rb2.addActionListener(mp);

    pl.add(rb1);

    pl.add(tf);

    pl.add(rb2);

    cb = new JComboBox(s);

    pl.add(cb);

    pl.add(new JLabel());

    pl.add(pl1); pl.add(pl2);

    pl.add(pl3); pl.add(pl4);

    pl.add(bn);

    pl.add(exit);

    bn1.addActionListener(mp);

    bn2.addActionListener(mp);

    bn3.addActionListener(mp);

    bn4.addActionListener(mp);

    bn5.addActionListener(mp);

    bn6.addActionListener(mp);

    bn7.addActionListener(mp);

    bn8.addActionListener(mp);

    bn.addActionListener(mp);

    exit.addActionListener(mp);

    this.setLayout(new BorderLayout());

    this.add(mp, BorderLayout.CENTER);

    this.add(pl, BorderLayout.EAST);

    this.setTitle("平面直角坐标系画图636f707962616964757a686964616f31333361326265小工具");

    this.setSize(797, 600 + 37);

    Dimension dn = Toolkit.getDefaultToolkit().getScreenSize();

    this.setLocation((dn.width - 797) / 2, (dn.height - 637) / 2);

    this.setVisible(true);

    this.setDefaultCloseOperation(3);

    }

    public static void main(String[] args)

    {

    new UI();

    }

    }

    package math;

    import java.awt.Color;

    import java.awt.Graphics;

    import java.awt.Graphics2D;

    import java.awt.Point;

    import java.awt.event.ActionEvent;

    import java.awt.event.ActionListener;

    import java.awt.event.MouseEvent;

    import java.awt.event.MouseMotionListener;

    import java.awt.geom.Ellipse2D;

    import java.awt.geom.Line2D;

    import javax.swing.JOptionPane;

    import javax.swing.JPanel;

    public class MyPanel extends JPanel implements ActionListener,MouseMotionListener

    {

    UI ui;

    int flag;

    double h_times;

    int w_times;

    int dx;

    int dy;

    String str;

    Point pt = new Point(0, 0);

    void init()

    {

    flag = -1;

    h_times = Math.PI / 100;

    w_times = 100;

    dx = 300;

    dy = 300;

    }

    public MyPanel(UI ui)

    {

    this.addMouseMotionListener(this);

    init();

    this.ui = ui;

    }

    public void paintComponent(Graphics g)

    {

    super.paintComponent(g);

    Graphics2D g2 = (Graphics2D)g;

    drawCoordinate(g2);

    Line2D line;

    g2.setColor(Color.BLUE);

    g2.drawString("(" + (pt.x - 300) + ", " + (300 - pt.y) + ")", pt.x + 20, pt.y + 20);

    switch(flag)

    {

    case 0:

    g2.drawString("y = Asin(Bx + C) + D", 105, 60);

    for(double i = 0; i < 600; i += 0.01)

    {

    line = new Line2D.Double(i, dy - Math.sin(getReal_X(i)) * w_times, i + 1, dy - Math.sin(getReal_X(i + 1)) * w_times);

    g2.draw(line);

    }

    break;

    case 1:

    g2.drawString("y = Acos(Bx + C) + D", 105, 60);

    for(double i = 0; i < 600; i += 0.01)

    {

    line = new Line2D.Double(i, dy - Math.cos(getReal_X(i)) * w_times, i + 1, dy - Math.cos(getReal_X(i + 1)) * w_times);

    g2.draw(line);

    }

    break;

    case 2:

    g2.drawString("y = Atan(Bx + C) + D", 105, 60);

    for(double i = 0; i < 600; i += 0.01)

    {

    line = new Line2D.Double(i, dy - Math.tan(getReal_X(i)) * w_times, i + 1, dy - Math.tan(getReal_X(i + 1)) * w_times);

    g2.draw(line);

    }

    break;

    case 3:

    g2.drawString("y = Apow(Bx + C, 2) + D", 105, 60);

    for(double i = 0; i < 600; i += 0.01)

    {

    line = new Line2D.Double(i, dy - Math.pow(getReal_X(i), 2) * w_times, i + 1, dy - Math.pow(getReal_X(i + 1), 2) * w_times);

    g2.draw(line);

    }

    break;

    case 4:

    g2.drawString("y = Apow(Bx + C, 3) + D", 105, 60);

    for(double i = 0; i < 600; i += 0.01)

    {

    line = new Line2D.Double(i, dy - Math.pow(getReal_X(i), 3) * w_times, i + 1, dy - Math.pow(getReal_X(i + 1), 3) * w_times);

    g2.draw(line);

    }

    break;

    case 5:

    g2.drawString("y = Alog(Bx + C) + D", 105, 60);

    for(double i = 0; i < 600; i += 0.01)

    {

    line = new Line2D.Double(i, dy - Math.log(getReal_X(i)) * w_times, i + 1, dy - Math.log(getReal_X(i + 1)) * w_times);

    g2.draw(line);

    }

    break;

    case 6:

    g2.drawString("y = Apow(2, Bx + C) + D", 105, 60);

    for(double i = 0; i < 600; i += 0.01)

    {

    line = new Line2D.Double(i, dy - Math.pow(2, getReal_X(i)) * w_times, i + 1, dy - Math.pow(2, getReal_X(i + 1)) * w_times);

    g2.draw(line);

    }

    break;

    case 7:

    g2.drawString("y = Asqrt(Bx + C) + D", 105, 60);

    for(double i = 0; i < 600; i += 0.01)

    {

    line = new Line2D.Double(i, dy - Math.sqrt(getReal_X(i)) * w_times, i + 1, dy - Math.sqrt(getReal_X(i + 1)) * w_times);

    g2.draw(line);

    }

    break;

    case 8:

    g2.drawString("y = a(sita)", 105, 60);

    for(double i = 0; i < 600; i += 0.01)

    {

    line = new Line2D.Double(getReal_X(i) * Math.cos(getReal_X(i)), dy - getReal_X(i) * Math.sin(getReal_X(i)) * w_times, getReal_X(i) * Math.cos(getReal_X(i + 1)), dy - getReal_X(i) * Math.sin(getReal_X(i + 1)) * w_times);

    g2.draw(line);

    }

    break;

    }

    if(flag != -1)

    {

    g2.drawString("A = " + w_times, 105, 90);

    g2.drawString("B= " + h_times, 105, 120);

    g2.drawString("C= " + (300 - dx), 105, 150);

    g2.drawString("D= " + (300 - dy), 105, 180);

    }

    }

    private double getReal_X(double x)

    {

    return (x - dx) * h_times;

    }

    private void drawCoordinate(Graphics2D g2)

    {

    int len = 20;

    Line2D line;

    for(int i = 0; i <= 600 / len; i++)

    {

    g2.setColor(Color.PINK.darker());

    if(i == 300 / len)

    g2.setColor(Color.RED);

    else;

    line = new Line2D.Double(0, i * len, 600, i * len);

    g2.draw(line);

    line = new Line2D.Double(i * len, 0, i * len, 600);

    g2.draw(line);

    }

    drawPoint(g2, 300, 300);

    }

    private void drawPoint(Graphics2D g2, double x, double y)

    {

    g2.setColor(Color.YELLOW);

    Ellipse2D circle = new Ellipse2D.Double(x - 2, y - 2, 4, 4);

    g2.fill(circle);

    }

    public void actionPerformed(ActionEvent e)

    {

    if(e.getSource() == ui.rb1)

    {

    ui.tf.setEnabled(true);

    ui.cb.setEnabled(false);

    flag = -1;

    }

    if(e.getSource() == ui.rb2)

    {

    ui.tf.setEnabled(false);

    ui.cb.setEnabled(true);

    }

    if(e.getSource() == ui.bn1)

    {

    h_times /= 1.1;

    }

    if(e.getSource() == ui.bn2)

    {

    h_times *= 1.1;

    }

    if(e.getSource() == ui.bn3)

    {

    // ui.bn4.setEnabled(true);

    w_times += 10;

    // if(w_times >= 300)

    // ui.bn3.setEnabled(false);

    }

    if(e.getSource() == ui.bn4)

    {

    // ui.bn3.setEnabled(true);

    w_times -= 10;

    // if(w_times <= 0)

    // ui.bn4.setEnabled(false);

    }

    if(e.getSource() == ui.bn5)

    {

    dx -= 10;

    }

    if(e.getSource() == ui.bn6)

    {

    dx += 10;

    }

    if(e.getSource() == ui.bn7)

    {

    // ui.bn8.setEnabled(true);

    dy -= 10;

    // if(dy <= 0)

    // ui.bn7.setEnabled(false);

    }

    if(e.getSource() == ui.bn8)

    {

    // ui.bn7.setEnabled(true);

    dy += 10;

    // if(dy >= 600)

    // ui.bn8.setEnabled(false);

    }

    if(e.getSource() == ui.bn)

    {

    if(ui.tf.isEnabled() == true)

    {

    str = ui.tf.getText();

    if(str == null || str.length() == 0)

    {

    ui.bn1.setEnabled(false);

    ui.bn2.setEnabled(false);

    ui.bn3.setEnabled(false);

    ui.bn4.setEnabled(false);

    ui.bn5.setEnabled(false);

    ui.bn6.setEnabled(false);

    ui.bn7.setEnabled(false);

    ui.bn8.setEnabled(false);

    JOptionPane.showMessageDialog(this, "请输入函数表达式 !");

    return;

    }

    }else flag = -2;

    ui.bn1.setEnabled(true);

    ui.bn2.setEnabled(true);

    ui.bn3.setEnabled(true);

    ui.bn4.setEnabled(true);

    ui.bn5.setEnabled(true);

    ui.bn6.setEnabled(true);

    ui.bn7.setEnabled(true);

    ui.bn8.setEnabled(true);

    init();

    if(ui.cb.isEnabled() == true)

    {

    flag = ui.cb.getSelectedIndex();

    }

    }

    if(e.getSource() == ui.exit)

    System.exit(0);

    repaint();

    }

    public void mouseDragged(MouseEvent arg0)

    {

    }

    public void mouseMoved(MouseEvent e)

    {

    pt = e.getPoint();

    repaint();

    }

    }

    2Q==

    已赞过

    已踩过<

    你对这个回答的评价是?

    评论

    收起

    展开全文
  • Java画函数

    千次阅读 2018-04-27 19:32:08
    功能简述如上面的界面,这个程序几乎可以出任何函数图像使用者应该先从左上角选择要的函数类型,然后再在右上角输入该函数的相关参数,点击绘制按钮后即可函数图像相关说明:1. 本函数只列举几个基本数学...

    功能简述

    如上面的界面,这个程序几乎可以画出任何函数图像

    使用者应该先从左上角选择要画的函数类型,然后再在右上角输入该函数的相关参数,点击绘制按钮后即可画出函数图像

    相关说明:

    1.      本函数只列举几个基本数学函数图像的实现,可以添加。

    2.      拖动放大界面仍然可以显示界面和图像。

    3.      可以通过设置UnitLength的值(并没有显示在界面中),设置单位长度所含的像素值,达到函数更好的观感。

    4.      本程序默认绘制下一个图像自动消除上一个图像,界面上只显示一个图像,简洁大方。

     

    代码如下

    import java.awt.Color; 
    import java.awt.Frame;
    import java.awt.Graphics; 
    import java.awt.Graphics2D; 
    import java.awt.GridLayout;
    import java.awt.event.ActionEvent; 
    import java.awt.event.ActionListener; 
    import java.awt.event.ItemEvent;
    import java.awt.event.ItemListener;
    import java.awt.geom.Line2D;
    import java.awt.geom.Point2D;
    import javax.swing.BorderFactory;
    import javax.swing.JButton; 
    import javax.swing.JComboBox;
    import javax.swing.JFrame; 
    import javax.swing.JLabel; 
    import javax.swing.JPanel; 
    import javax.swing.JTextField; 
    import javax.swing.border.LineBorder; 
    
    public class DrawFn extends JFrame implements ItemListener{
    	private JTextField txt_c;
    	private JTextField txt_b;
    	private JTextField txt_a;
    	public JComboBox chooseFun;
    	//draw_actionAdapter adapter;
    	public int A;
    	public drawFnPanel panel = new drawFnPanel(); 
    	public static void main(String[] args) {
    		DrawFn frame=new DrawFn();
    		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		frame.setSize(800, 600);
    		frame.setLocationRelativeTo(null);
    		frame.setVisible(true); 
    		frame.setBackground(Color.BLACK);
    		}
    	public DrawFn() {
    		super("画函数图像");
    		final JLabel aLabel = new JLabel();
    		aLabel.setForeground(Color.WHITE);
    		aLabel.setText("a=");
    		aLabel.setBounds(650, 10, 21, 18); //设置位置,大小
    		getContentPane().add(aLabel);
    		txt_a = new JTextField();
    		txt_a.setBounds(680, 8, 60, 18);
    		getContentPane().add(txt_a);
    		//
    		final JLabel bLabel = new JLabel();
    		bLabel.setForeground(Color.WHITE);
    		bLabel.setText("b="); 
    		bLabel.setBounds(650, 30, 21, 18); 
    		getContentPane().add(bLabel); 
    		txt_b = new JTextField(); 
    		txt_b.setBounds(680, 28, 60, 18); 
    		getContentPane().add(txt_b);
    		//
    		final JLabel cLabel = new JLabel(); 
    		cLabel.setForeground(Color.WHITE);
    		cLabel.setText("c="); 
    		cLabel.setBounds(650, 50, 32, 18);
    		getContentPane().add(cLabel);
    		//this.setContentPane(cLabel); 
    		txt_c = new JTextField(); 
    		txt_c.setBounds(680, 48, 60, 18); 
    		getContentPane().add(txt_c);
    		//this.setContentPane(txt_c);
    
    		//设置按钮
    		final JButton button = new JButton(); 
    		button.addActionListener(new draw_actionAdapter(this));//什么意思?
    		button.setText("绘制"); 
    		button.setBounds(680, 80, 60, 18); 
    		getContentPane().add(button);
    		//this.setContentPane(button);
    		
    		//定义下拉菜单
    		final JLabel choose = new JLabel(); 
    		choose.setForeground(Color.WHITE);
    		choose.setText("请选择函数类型:"); 
    		choose.setBounds(20, 5, 120, 20);
    		getContentPane().add(choose);
    		JPanel jp1=new JPanel();
    		String []fun={"ax^2+bx+c","ae^bx+c","a*sin(PIx+b)+c","a*b^x+c","a*x^b+c","敬请期待"};
    		chooseFun=new JComboBox(fun);
    		chooseFun.setBounds(20, 30, 120, 20);
    		jp1.add(chooseFun);
    		chooseFun.setMaximumRowCount(3);
    		getContentPane().add(chooseFun);
    		
    		
    		
    		chooseFun.addItemListener(this);
    		getContentPane().add(panel);
    		//this.setContentPane(panel);
    		
    	}
    	public void itemStateChanged(ItemEvent e) {
    		if(e.getStateChange()==e.SELECTED)
    		{
    			A=chooseFun.getSelectedIndex();
    			//System.out.println(A);
    		}
    	}
    	
    	
    
    	public void paintFn(ActionEvent e){
    		panel.paintFn(Integer.parseInt(txt_a.getText()), Integer.parseInt(txt_b.getText()), Integer.parseInt(txt_c.getText()));
    	}
    	
    	class draw_actionAdapter implements ActionListener{ 
    		private DrawFn adapter; 
    		public draw_actionAdapter(DrawFn adapter){ 
    			this.adapter=adapter; 
    			} 
    		public void actionPerformed(ActionEvent e){
    			//adapter.getA(e);
    			adapter.paintFn(e);
    			adapter.repaint();
    			}
    		} 
    class drawFnPanel extends JPanel{
    	private float fa; 
    	private float fb; 
    	private float fc;
    	private int UnitLength=100;//可以任意改变该像素值
    	public void paintFn(int a,int b,int c){
    		fa=a;
    		fb=b; 
    		fc=c; 
    		}
    	
    	public double Fun(double x){
    		//System.out.println("A="+DrawFn.A);
    		if(A==0)
    			return fa*x*x+fb*x+fc;
    		else if(A==1)
    			return fa*Math.pow(Math.E, fb*x)+fc ;//这里可以输入任何函数
    		else if(A==2)
    			return fa*Math.sin(Math.PI*x+fb)+fc;
    		else if(A==3)
    			return fa*Math.pow(fb, x)+fc;
    		else if(A==4)
    			return fa*Math.pow(x,fb)+fc;
    		else
    			return 0;
    	}
    	 int width,height;
    	 int X,Y;
    	 //重载paintComponent函数
    	public void paintComponent(Graphics g)
    	{
    		g.setColor(Color.BLACK);
    		width = this.getWidth();//获得宽度
    		height = this.getHeight();//获得高度
    		X=width/2;
    		Y=height/2;//获得原点坐标
    		this.drawAxes(g);
    		this.function(g);
    	}
    	//画坐标轴
    	private void drawAxes(Graphics g)
    	{
    		g.setColor(Color.WHITE);
    		g.drawLine(0, Y, width, Y);
    		g.drawLine(X, 0, X, height);
    		g.drawString("0",X + 2,Y +12); //画原点数字
    		for(int i=1;i*UnitLength<width;i++)
    		{
    			g.drawLine(X+i*UnitLength,Y-1,X+i*UnitLength,Y-6);//画X轴正向的小竖线
    			g.drawLine(X - i*UnitLength, Y-1, X - i*UnitLength, Y-6);//画X轴负向的小竖线
    			g.drawString(String.valueOf(i), X + i*UnitLength-3, Y + 12);  // x轴正向数字
    			g.drawString(String.valueOf(i*-1), X - i*UnitLength-3, Y + 12);  // x轴负向数字
    			//画Y轴
    			g.drawLine(X+1,Y+i*UnitLength,X+6,Y+i*UnitLength);
    			g.drawLine(X+1,Y-i*UnitLength,X+6,Y-i*UnitLength);
    			g.drawString(String.valueOf(i), X-12, Y - i*UnitLength-3);
    			g.drawString(String.valueOf(i*-1), X-12, Y + i*UnitLength-3);
    		}
    	}
    	//实现任意函数函数图像
    	public void function(Graphics g1)
    	{
    		Point2D temp1,temp2;
    		double x,y;//我们看到的坐标值
    		Graphics2D g = (Graphics2D)g1;
    		g.setColor(Color.WHITE);
    		x = -1.0*X/UnitLength;
    		//temp1返回面板的实际坐标值(以像素为单位)
    		y = Fun(x);
    		temp1 = new Point2D.Double(this.alterX(x * UnitLength), this.alterY(y * UnitLength));
    		for(int i = 0 ; i < width; i++){
    			x =x + 1.0/UnitLength;//前进一个像素
    			y = Fun(x);
    			if ( Math.abs(y) < Y){
    			temp2 = new Point2D.Double(this.alterX(x * UnitLength), this.alterY(y * UnitLength));
    			g.draw(new Line2D.Double(temp1, temp2));
    			temp1 = temp2;
    			}
    		}
    		//repaint();
    	}
    	  //新坐标对应的原坐标
    	private double alterX(double x){
    		return  x + X;
    	}
    	private double alterY(double y){
    		return -1 *( y - Y);
    	}
    } 
    }

    展开全文
  • java 数学函数

    万次阅读 多人点赞 2017-11-03 21:42:45
    java 数学函数图不太方便,需要用第三方包 jfree,安装或下载方法网上有。要用到 jfree 里面的 XYSeries,生成一系列数据。然后根据生成的数据,使用 chart 描点画图。举例:1. 画图 y= x^2import javax.swing....

    java 画数学函数图不太方便,需要用第三方包 jfree,安装或下载方法网上有。

    要用到 jfree 里面的 XYSeries,生成一系列数据。

    然后根据生成的数据,使用 chart 描点画图。

    举例:

    1. 画图 y= x^2

    import javax.swing.JFrame;
    
    import org.jfree.chart.ChartFactory;
    import org.jfree.chart.ChartFrame;
    import org.jfree.chart.JFreeChart;
    import org.jfree.chart.plot.PlotOrientation;
    import org.jfree.data.xy.XYSeries;
    import org.jfree.data.xy.XYSeriesCollection;
    
    public class DrawMath {
    
    	public static void main(String[] args) {
    
    		XYSeries series = new XYSeries("xySeries");
    		for (int x = -100; x < 100; x++) {
    			int y = x*x;
    			series.add(x, y);
    		}
    		
    		XYSeriesCollection dataset = new XYSeriesCollection();
    		dataset.addSeries(series);
    		JFreeChart chart = ChartFactory.createXYLineChart(
    				"y = x^2", // chart title
    				"x", // x axis label
    				"x^2", // y axis label
    				dataset, // data
    				PlotOrientation.VERTICAL,
    				false, // include legend
    				false, // tooltips
    				false // urls
    				);
    
    		ChartFrame frame = new ChartFrame("my picture", chart);
    		frame.pack();
    		frame.setVisible(true);
    		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    	}
    
    }
    

    显示效果:



    2. 画图 y= sin(x)

    import javax.swing.JFrame;
    import org.jfree.chart.ChartFactory;
    import org.jfree.chart.ChartFrame;
    import org.jfree.chart.JFreeChart;
    import org.jfree.chart.plot.PlotOrientation;
    import org.jfree.data.xy.XYSeries;
    import org.jfree.data.xy.XYSeriesCollection;
    
    public class DrawMath {
    
    	public static void main(String[] args) {
    
    		XYSeries series = new XYSeries("xySeries");
    		for (double x = -10; x < 10; x = x + 0.1) {
    			double y = Math.sin(x);
    			series.add(x, y);
    		}
    		
    		XYSeriesCollection dataset = new XYSeriesCollection();
    		dataset.addSeries(series);
    		JFreeChart chart = ChartFactory.createXYLineChart(
    				"y = sin(x)", // chart title
    				"x", // x axis label
    				"sin(x)", // y axis label
    				dataset, // data
    				PlotOrientation.VERTICAL,
    				false, // include legend
    				false, // tooltips
    				false // urls
    				);
    
    		ChartFrame frame = new ChartFrame("my picture", chart);
    		frame.pack();
    		frame.setVisible(true);
    		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);	
    	}
    }

    显示效果:



    3. 画散点图

    画散点图时,要用到 plot 与 render 进一步设置了。

    举例:

    import javax.swing.JFrame;
    import org.jfree.chart.ChartFactory;
    import org.jfree.chart.ChartFrame;
    import org.jfree.chart.JFreeChart;
    import org.jfree.chart.plot.PlotOrientation;
    import org.jfree.chart.plot.XYPlot;
    import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
    import org.jfree.data.xy.XYSeries;
    import org.jfree.data.xy.XYSeriesCollection;
    
    public class DrawMath {
    
    	public static void main(String[] args) {
    
    		XYSeries series = new XYSeries("xySeries");
    		for (double x = -10; x < 10; x = x + 0.1) {
    			double y = Math.sin(x);
    			series.add(x, y);
    		}
    		
    		XYSeriesCollection dataset = new XYSeriesCollection();
    		dataset.addSeries(series);
    		JFreeChart chart = ChartFactory.createXYLineChart(
    				"y = sin(x)", // chart title
    				"x", // x axis label
    				"sin(x)", // y axis label
    				dataset, // data
    				PlotOrientation.VERTICAL,
    				false, // include legend
    				false, // tooltips
    				false // urls
    				);
    		
    		XYPlot plot = (XYPlot)chart.getPlot();
    		XYLineAndShapeRenderer renderer = new XYLineAndShapeRenderer();
    		renderer.setSeriesLinesVisible(0, false); // 设置连线不可见
    	        plot.setRenderer(renderer);
    		
    		ChartFrame frame = new ChartFrame("my picture", chart);
    		frame.pack(); // fit window to figure size
    		frame.setVisible(true);
    		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);	
    	}
    }

    显示效果:




    展开全文
  • JAVA绘制函数图像工具

    2017-06-26 10:31:35
    JAVA绘制函数图像工具,学校的一个java大作业
  • 基于Java的三角函数像素级画图算法的研究与实现林宗朝(厦门大学自动化系,福建 厦门 361005)摘要:在Windows中的映射模式和几种坐标体系原理的基础上,提出了三角函数像素级的画图算法。该算法代码编写容易,具备...
  • Sin()函数图像

    千次阅读 2021-03-08 23:07:46
    主题:sin(x)函数图像java 代码如下:import java.awt.FlowLayout;import java.awt.Graphics;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.JButton;import javax....
  • 牛顿插值 数值计算 java 代码 画函数图象 牛顿插值 数值计算 java 代码 画函数图象 牛顿插值 数值计算 java 代码 画函数图象 牛顿插值 数值计算 java 代码 画函数图象
  • 展开全部一下32313133353236313431303231363533e4b893e5b19e31333361326238为一个代码示例importjavax....importjava.awt.*;/***@author杨舸*@version1.0.0*@sincejdk1.8*/classDiagramextendsJPanel{staticfina...
  • 如何用JAVA画正弦图形

    2021-03-01 09:59:04
    import java.awt.BorderLayout;import java.awt.Color;import java.awt.Container;import java.awt.Dimension;import java.awt.Font;import java.awt.Graphics;import java.awt.Toolkit;import javax.swing.JFrame;i...
  • Java画sinx函数

    2020-04-18 19:36:53
    import java.awt.*; import java.awt.event.*; import javax.swing.*; class WinClose implements WindowListener { @Override public void windowOpened(WindowEvent e) { } @Overrid...
  • JAVA读写BMP图像函数

    2016-12-06 13:16:17
    JAVA读写BMP图像函数
  • Java画正弦函数曲线

    2009-06-03 21:16:23
    Java实现正弦函数曲线,简单,明洁。
  • (四)java.迭代函数实现特殊图形的绘制
  • 好吧,所以我所拥有的sin函数与练习中的函数略有不同,但是它起作用所以它应该不是问题.另一方面,余弦函数,我无法找到它的代码所以我没有在我的程序中. 我还需要做的是将-Pi和Pi放在他们可敬的地方的图表上. 所以,这...
  • Java写的 函数图像显示器 : 支持显示 一二三次函数,幂函数,对数函数,椭圆方程,任意三角形 的函数图像。 ##How Does It Work 所有函数继承于一个顶级父类 BasicFn ,并由各个子类判断画布上的每个像素点是否...
  • Java实现对数函数图像增强

    千次阅读 2020-03-07 15:57:16
    对数函数图像增强 上一篇我们说到的图像线性增强是对于黑白图片整体像素值局限于某一区间的情况进行线性增强。但是有时候的图片显示效果不好并不是这个原因,而是一张图片中的大部分像素值都偏高或偏低,这样的图片...
  • 一个用swing写的一个二次函数图象的工具,有源代码。适合初学着
  • java sin曲线 java 画函数曲线

    千次阅读 2013-08-25 11:46:43
    [java] view plaincopyprint? import java.applet.*; import java.util.*; import java.awt.*; import java.awt.event.*;... /* * java sin曲线 */ public class charts exten
  • 高分悬赏,Java语言用swing编写一个函数作图程序,输入表达式可以图像,可以任意放大缩小
  • 中学数学中经常出现使用“几何画板”电脑软件绘制函数图像的场景。开源软件中有一款叫 GeoGebra 的软件可以实现“几何画板”的功能方便地绘制函数图像,并可以动态地查看函数变化的轨迹。中学数学教学中,可以使用此...
  • JAVA中部分图象函数的用法.pdf
  • 在线画函数图像

    2012-01-02 10:10:49
    在线绘制函数图像的源码,需要HTML5支持,纯JAVA实现。
  • java sin图形

    2010-06-03 14:54:51
    java语言出一个sin函数图形,用两点间线段连接。用java语言出一个sin函数图形,用两点间线段连接。
  • [Java画图]画函数图像

    2015-09-27 23:53:00
    利用Graphics类任意显式函数图像,只需修改代码中的F()函数即可,另外调整timesx和timesy参数来分方向放大或缩小图像。需要重定义坐标系。 1 package test; 2 3 import javax.swing.*; 4 import java...
  • Java数字图像处理基础-------Java Swing简单使用,图形绘画—太极图 一:概述 使用java画太极图,就是利用画圆的函数进行一次次的覆盖处理; 二:处理思想: 1.一半白色,一半黑色; 2. 上部分的中等白圆 3....

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 89,665
精华内容 35,866
关键字:

java画函数图像

java 订阅