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部分有点难,但前提是它假设您将函数缩放到缩放。看起来该方法应该在 200 x 200 窗口中绘制图形,函数范围从 -100 到 100。因此没有缩放,但您不会看到太多正弦和余弦函数。
您不必缩放的事实也意味着绘制轴很容易。请注意,坐标系从 -100 运行到 100,这应该可以为您提供足够的线索。

保重tan!它不是为所有输入值定义的。其他功能之一也是如此,这可能就是他们在练习中的原因。

该方法使用Polygon. Polygon可以通过调用 来简单地绘制A Graphics.drawPolygon,但该方法将关闭它:最后一个点将与第一个点相连。
对此有一些解决方法,例如添加额外的点并强制将额外的线精确地绘制在轴上。但它们不适用于所有公式,我认为这不是你应该研究的。该练习可能只是使用Polygon,因此您可以调用drawPolygon实际渲染。

要将 JPanel 添加到 JFrame,请使用JFrame.add( subclass )JFrame.setContentPane( subclass )

于 2012-08-08T19:01:35.350 回答