0

これは私がJavaに関する本で見つけた演習です。私はそれを解決することができません。

 public abstract class AbstractDrawFunction extends JPanel {
    /** Polygon to hold the points */
    private Polygon p = new Polygon();
    protected AbstractDrawFunction () {
    drawFunction();
    }
    /** Return the y-coordinate */
    abstract double f(double x);
    /** Obtain points for x-coordinates 100, 101, ..., 300 */
    public void drawFunction() {
    for (int x = -100; x <= 100; x++) {
    p.addPoint(x + 200, 200 - (int)f(x));
     }
    }
    /** Implement paintComponent to draw axes, labels, and
    * connecting points
    */
    protected void paintComponent(Graphics g) {
    // To be completed by you
     }
    }

Test the class with the following functions:
f(x) = x2;
f(x) = sin(x);
f(x) = cos(x);
f(x) = tan(x);
f(x) = cos(x) + 5sin(x);
f(x) = 5cos(x) + sin(x);
f(x) = log(x) + x2;

関数ごとに、AbstractDrawFunctionクラスを拡張し、fメソッドを実装するクラスを作成します。

4

1 に答える 1

3

サブクラスの実装は簡単です。クラスを拡張してメソッドを実装するだけです。あなたはすでにこれを行う方法を知っていて理解していると思います。そうでない場合は、本で「派生クラス」を検索してください。

このpaintComponent部分は少し難しいですが、関数をスケーリングすることを前提としている場合に限ります。このメソッドは、-100から100の範囲の関数を使用して、200 x 200のウィンドウでグラフを描画する必要があるようです。したがって、スケーリングはありませんが、正弦関数と余弦関数の多くは表示されません。
拡大縮小する必要がないという事実は、軸の描画が簡単であることも意味します。座標系は-100から100まで実行されることに注意してください。これにより、十分な手がかりが得られます。

気をつけてtan!すべての入力値に対して定義されているわけではありません。同じことが他の機能の1つにも当てはまり、それがおそらくそれらが演習に参加している理由です。

メソッドがを使用するという点で、少し落とし穴がありますPolygonPolygonを呼び出すと簡単に描画できますが、そのGraphics.drawPolygonメソッドはそれを閉じます。最後のポイントが最初のポイントに接続されます。
これには、追加のポイントを追加したり、その追加の線を軸上に正確に描画するように強制したりするなど、いくつかの回避策があります。しかし、それらはすべての式で機能するわけではなく、あなたが取り組んでいるはずのものではないと思います。演習ではおそらく、実際のレンダリングPolygonを呼び出すことができるように使用します。drawPolygon

JPanelをJFrameに追加するには、JFrame.add( subclass )またはを使用しますJFrame.setContentPane( subclass )

于 2012-08-08T19:01:35.350 に答える