0

こんにちは、私は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");

}


}
4

3 に答える 3

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/JComponentまたは でBufferedImage表示するのが最適JLabelです。
  3. 「グラフ コンポーネント」は、フレームのサイズを設定するのではなく、優先サイズを宣言する必要があります。
于 2013-03-10T06:15:49.763 に答える
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がそのためです。

于 2013-03-10T05:32:11.137 に答える
0

これを行うにはいくつかの方法があります。これが課題である場合、あなたの教授はあなたが思いついた方法を見ようとしていると思います. 最も基本的なレベルでは、最後の点から現在の点まで線を引くだけです。他にどのようにこれを達成できますか? 多分別の色のポリライン?少し数学を使って大きな円を描いてから線を引いてみませんか?

ここでは、特定の問題に対処する簡単な方法を 1 つ示します。これを提出することはお勧めしませんが(課題の場合)、基本原則を示しています。

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");
}
}
于 2013-03-10T05:46:05.227 に答える