要做一个数学函数发生器
  要求:至少包含直线(Y=AX+B)以及椭圆,抛物线,双曲线四种函数
  系数可任意输入
  有可变横纵座标(这是要做成什么样子,不懂)

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【voidtanq】截止到2008-07-01 21:29:24的历史汇总数据(不包括此帖):
    发帖的总数量:0                        发帖的总分数:0                        
    结贴的总数量:0                        结贴的总分数:0                        
    无满意结贴数:0                        无满意结贴分:0                        
    未结的帖子数:0                        未结的总分数:0                        
    结贴的百分比:---------------------结分的百分比:---------------------
    无满意结贴率:---------------------无满意结分率:---------------------
    如何结贴请参考这里:http://topic.csdn.net/u/20080501/09/ef7ba1b3-6466-49f6-9d92-36fe6d471dd1.html
      

  2.   

    去看看 jasperReport 的使用吧! 当然 jfreeChat 也行
      

  3.   

    本人正在做贪吃蛇游戏..其中也用到了画图...你在JPanel上添加一个Canvas(画布).....然后调用Graphics类的draw...方法...实现画图...根据你的需要改变参数就ok了
      

  4.   

    知道画点就行了,最主要的就是进行坐标转换,可以编写一个坐标类,将x,y的坐标点转换为画布上的点,然后将点画出来.剩下的就是在x的一个取值范围内根据函数算y值,将x,y传给坐标类画点,这样什么函数都能画
      

  5.   


    抛物线不就是圆弧吗...用这个不就行了...drawArc(int x, int y, int width, int height, int startAngle, int arcAngle) 
              绘制一个覆盖指定矩形的圆弧或椭圆弧边框。
      

  6.   

    Graphics类没有画点的方法,可以用画线的方法drawLine(int x1, int y1, int x2, int y2)来画点,只要x2=x1,y2=y1就行了
      

  7.   

    public class Test3 {
        public static void main(String[] args) {
            TriFunc tri = new TriFunc();
            
            // 生成一块25×100的画布
             Canvas canvas = new Canvas(25, 100);        // 画sin曲线,周期为2
            tri.drawSin(canvas, 2.0);
            canvas.printCanvas();
            
            System.out.println();
            canvas.reset();
            // 画cos曲线,周期为2
            tri.drawCos(canvas, 2.0);
            canvas.printCanvas();
        }
    }class TriFunc {    /**
         * 画sin曲线
          * @param canvas 画布
          * @param period 曲线周期
          */
        public void drawSin(Canvas canvas, double period) {        
            char[][] chars = canvas.getCanvas();
            // x 轴的比率
             double xRatio = (2 * period * Math.PI) / (canvas.getWidth() - 1);
            // y 轴的放大倍率
             int yMulti = (canvas.getHeight() - 1) / 2;
            for(int i = 0; i < canvas.getWidth(); i++) {
                // 将数组索引映射为横坐标值
                  double k = (i - canvas.getWidth() / 2) * xRatio;
                // 将sin值映射为数组索引
                  int h = yMulti - (int)Math.round(Math.sin(k) * yMulti);
                chars[h][i] = Canvas.FILL_CHAR;
            }
        }
        
        /**
         * 画cos曲线
          * @param canvas 画布
          * @param period 曲线周期
          */
        public void drawCos(Canvas canvas, double period) {
            char[][] chars = canvas.getCanvas();
            double xRatio = (2 * period * Math.PI) / (canvas.getWidth() - 1);
            int yMulti = (canvas.getHeight() - 1) / 2;
            for(int i = 0; i < canvas.getWidth(); i++) {
                double k = (i - canvas.getWidth() / 2) * xRatio;
                int h = yMulti - (int)Math.round(Math.cos(k) * yMulti);
                chars[h][i] = Canvas.FILL_CHAR;
            }
        }
    }
    class Canvas {
        
        private int height;
        private int width;
        private char[][] canvas;   
        
        // 填充字符
         public static char FILL_CHAR = '#';
        // 空白字符
         public static char BLANK_CHAR = ' ';
        
        /**
         * 构建一块画布
          * @param height
         * @param width
         */
        public Canvas(int height, int width) {
            // 由于需要画坐标轴,所以得采用奇数
             this.height = height % 2 == 0 ? height + 1 : height;
            this.width = width % 2 == 0 ? width + 1 : width;               
            init();
        }
        
        /**
         * 初始化画布
          */
        private void init() {
            this.canvas = new char[height][width];
            for(int i = 0; i < height; i++) {
                for(int j = 0; j < width; j++) {
                    canvas[i][j] = BLANK_CHAR;
                }
            }
            addAxis();
        }
        
        /**
         * 添加坐标轴
          */
        private void addAxis() {
            // 添加横坐标
             int y = height / 2;
            for(int x = 0; x < width; x++) {
                canvas[y][x] = '-';
            }
            // 添加纵坐标
             int xx = width / 2;
            for(int yy = 0; yy < height; yy++) {
                canvas[yy][xx] = '|';
            }
            // 添加原点
             canvas[y][xx] = '+';
        }
        
        /**
         * 输出画布
          */
        public void printCanvas() {
            for(int i = 0; i < height; i++) {
                for(int j = 0; j < width; j++) {
                    System.out.print(canvas[i][j]);
                }
                System.out.println();
            }
        }
        
        /**
         * 清空画布
          */
        public void reset() {
            init();
        }
        
        public int getHeight() {
            return height;
        }
        public int getWidth() {
            return width;
        }    public char[][] getCanvas() {
            return canvas;
        }    
    }
      

  8.   

    救命啊 X,Y是全局变量,他们的值怎么传不到public void paint(Graphics g)这个函数里啊
    public void actionPerformed(ActionEvent e)//监听
    {if(e.getActionCommand()=="确定")
       {
        A=Integer.valueOf(tx.getText());
        B=Integer.valueOf(ty.getText());
        X=Integer.valueOf(ty.getText());
        Y=Integer.valueOf(ty.getText());}
    public void paint(Graphics g)
    {   System.out.print(X/Y);//此句每次输出1
    if(X>Y)
    {
     a1=a1-X/Y*d;a3=a3+X/Y*d;
    }
    if(X<Y)
    {
    b2=b2+Y/X*d;b4=b4-Y/X*d;
    }
    }