请教如何用java编写一个函数图像生成的应用程序?谢谢!

能有一个函数生成的源码最好,谢谢!... 能有一个函数生成的源码最好,谢谢! 展开
 我来答
王者来邪
推荐于2017-12-16 · TA获得超过198个赞
知道答主
回答量:192
采纳率:28%
帮助的人:39.2万
展开全部

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("平面直角坐标系画图小工具");
  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();  
 }
}

刚学java时写着玩的

追问
谢谢,我试着运行一下。
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
_汪锐
2014-09-05 · TA获得超过358个赞
知道小有建树答主
回答量:513
采纳率:0%
帮助的人:260万
展开全部
什么叫函数图像生成?????
追问
就是输入一个函数,生成它的图像,
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式