0

こんにちは私はあなたが方程式をグラフ化することを可能にするJavaプログラムを作成しようとしています、そしてそれが余弦関数と正弦関数をグラフ化することを望むまでそれは今のところうまく機能しています。サインとコサインがdoubleを返すときにこれを行う方法について混乱していますが、drawLineは整数のみを取ります。私はJavaを初めて使用するので、これは簡単かもしれませんが、助けていただければ幸いです。

これが私のコードです:

import java.util.Scanner;
import javax.swing.JFrame;
import javax.swing.*;
import java.awt.*;
import java.lang.Math;
import java.awt.geom.*;

class PlotGraph extends JFrame{


public void paintComponent(Graphics g){
    Graphics2D g2 = (Graphics2D) g;

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

    double xmin, xmax;
    double y;
    xmin =(0);
    xmax = 100;
    double x = xmin;

    double form = Math.cos(x);

    double last_y = 300-(form);

    for (x = xmin+1; x<=xmax; x++){
    double newForm = Math.cos(x);
    y = 300-(newForm);
    g2.draw(new Line2D.Double(x-1+(300), last_y, x+300, y));
    last_y = y;

    }




}

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

4 に答える 4

2

Math.cos() は -1 と 1 の間の値を返すため、int にキャストすると、-1、0、1 の 3 つの値のみになり、ほとんどの場合 0 になります。

あなたがしたいことは、整数の範囲を作成するために倍精度に大きな定数を掛けることです:

    y = 300-(int)(300d * newForm);

300 の後の "d" に注意してください。これにより、300 が double になり、乗算も 2 倍になり、細かい粒度が維持されます。

于 2013-03-10T07:37:32.177 に答える
1

Line2D.Doubleオブジェクト、Graphics2D Graphicsオブジェクトを使用し、Graphics2Dオブジェクトにそのdraw(...)メソッドで形状を描画させます。

于 2013-03-10T07:36:41.727 に答える
0

doubleをintにキャストしてみてください。

int y = 300 - (int) (Math.cos(x) * scaleFactor);

そして、Aiiasが言ったように、cosは-1から1の間の値しか返しません。したがって、定数係数を掛けてください。そうしないと、キャスト後に値が失われます。

于 2013-03-10T07:34:33.623 に答える
0

適切にスケーリングした後、次のいずれかを試すことができます。

  • に型キャストdoubleしますintint i = (int)d;

  • 丸め。これはlong、タイプキャストによって次の値を返す必要がありますintint i = (int)Math.round(d);

于 2013-03-10T07:35:30.220 に答える