用线连接点以创建折线图

时间:2013-03-10 05:26:40

标签: java graph points

你好我对java很新,并且已经坚持了一段时间,所以希望有人能够救我。基本上我正在创建一个可以绘制方程的程序,现在我正在测试-10到10之间的x ^ 2.我可以在正确的位置得到点图但我无法弄清楚如何填写点之间的点,所以它看起来像一个真实的图形。

这是我的代码:

import java.util.Scanner;
import javax.swing.JFrame;
import java.awt.*;

class PlotGraph extends JFrame{


public void paint(Graphics l){

    l.drawLine(50, 300, 550, 300); //x axis
    l.drawLine(300, 550, 300, 50); //y axis
    //Orignin x = 300 y = 300

    int xmin, xmax, y, tmin, tmax;
    xmin =(-10);
    xmax = 10;
    int x_bet, y_bet;

    while(xmin<=xmax){
        y = 300-(xmin*xmin);
        l.drawLine(xmin+300, y, xmin+300, y);

        //while(x_bet>xmin){
        //l.drawLine(, , , );
        //}

        xmin++;
    }



}

public static void main(String [] args) {

    PlotGraph graph = new PlotGraph();
    graph.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    graph.setSize(600, 600);
    graph.setVisible(true); 
    graph.setTitle("PlotGraph");

}


}

3 个答案:

答案 0 :(得分:2)

另一种方法是创建GeneralPath,就像这样。

import javax.swing.JFrame;
import java.awt.*;
import java.awt.geom.*;

class PlotGraph extends JFrame{

    public void paint(Graphics l){

        l.drawLine(50, 300, 550, 300); //x axis
        l.drawLine(300, 550, 300, 50); //y axis

        int xmin, xmax, y, tmin, tmax;
        xmin =(-10);
        xmax = 10;
        int x_bet, y_bet;
        GeneralPath gp = new GeneralPath();

        y = 300-(xmin*xmin);
        gp.moveTo((double)xmin+300, (double)y);
        while(xmin<=xmax){
            y = 300-(xmin*xmin);
            gp.lineTo((double)xmin+300, (double)y);

            xmin++;
        }

        Graphics2D g2 = (Graphics2D)l;
        g2.setColor(Color.RED);
        g2.draw(gp);
    }

    public static void main(String [] args) {
        PlotGraph graph = new PlotGraph();
        graph.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        graph.setSize(600, 600);
        graph.setVisible(true);
        graph.setTitle("PlotGraph");
    }
}

这个来源仍有问题:

  1. GUI更新应该在EDT上完成。
  2. 自定义绘画最好在JPanel / JComponentBufferedImage中显示的JLabel中完成。
  3. “图表组件”应声明首选尺寸,而不是设置框架的尺寸。

答案 1 :(得分:0)

也许试试这个:

int x = xmin;
int last_y = 300-(x*x);
for (x = xmin+1; x<=xmax; x++);
    y = 300-(x*x);
    l.drawLine(x-1, last_y, x, y);
    last_y = y;
}

您希望在先前的x和y坐标与当前坐标之间绘制线条。这就是last_y的用途。

答案 2 :(得分:0)

有几种方法可以做到这一点。如果这是一项任务,那么我猜你的教授正在寻找你想出的方法。在最基本的级别,您只需从最后一个点到当前点绘制一条线。你怎么能做到这一点?也许是不同颜色的折线?也许用一点数学来绘制更大的圆圈然后通过它们运行一条线?

这是解决具体问题的一种简单方法。我不建议将其转入(如果是作业),但它会向您显示基本原则。

import java.util.Scanner;
import javax.swing.JFrame;
import java.awt.*;
class PlotGraph extends JFrame{
public void paint(Graphics l){

l.drawLine(50, 300, 550, 300); //x axis
l.drawLine(300, 550, 300, 50); //y axis

int xmin, xmax, y, tmin, tmax;
int z = 0;
xmin =(-10);
xmax = 10;
int x_bet, y_bet;
while(xmin<=xmax){
    y = 300-(xmin*xmin);
    l.drawLine(xmin+300, y, xmin+300, y);
    if(z!=0)
    l.drawLine(xmin+300, y, xmin+300, z);
    z=y;
    xmin++;
}
}

public static void main(String [] args) {
PlotGraph graph = new PlotGraph();
graph.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
graph.setSize(600, 600);
graph.setVisible(true); 
graph.setTitle("PlotGraph");
}
}