简单的函数绘图用java语言_【JAVA语言程序设计基础篇】--图形-- 使用抽象方法绘制函数图形...

该博客展示了如何使用JAVA编程实现一个抽象类`AbstractDrawFunction`,通过其子类`DrawXSquare`, `DrawSine`, `DrawCosine`分别绘制平方函数、正弦函数和余弦函数的图形。通过`drawFunction`方法计算坐标点并利用`Graphics`对象绘制x轴、y轴及函数曲线。" 108426398,9127346,C/C++基础:替换字符串中的特定字符,"['C++编程', '字符操作', '字符串操作']
摘要由CSDN通过智能技术生成

一个很好的运用抽象类的例子

package chapter15_编程练习题;

import java.awt.*;

import javax.swing.*;

@SuppressWarnings("serial")

public class Exercise15_13 extends JFrame {

public Exercise15_13() {

setLayout(new GridLayout(1, 2,10,10));

add(new DrawSine());

add(new DrawCosine());

}

public static void main(String[] args) {

Exercise15_13 frame = new Exercise15_13();

frame.setSize(400, 400);

frame.setTitle("Exercise15_13");

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

frame.setLocationRelativeTo(null); // Center the frame

frame.setVisible(true);

}

}

@SuppressWarnings("serial")

class DrawXSquare extends AbstractDrawFunction {//y=x平方

/**Implement the fuction*/

public double f(double x) {

// scaleFactor for adjusting y coordinates

double scaleFactor = 0.01;

return scaleFactor * x * x;

}

}

@SuppressWarnings("serial")

class DrawSine extends AbstractDrawFunction {//sin

public double f(double x) {

return 50 * Math.sin((x / 100.0) * 2 * Math.PI);

}

}

@SuppressWarnings("serial")

class DrawCosine extends AbstractDrawFunction {//cos

public double f(double x) {

return 50 * Math.cos((x / 100.0) * 2 * Math.PI);

}

}

@SuppressWarnings("serial")//抽象类

abstract class AbstractDrawFunction extends JPanel {

/**Polygon to hold the points*/

private Polygon p = new Polygon();

final int TO_X_AXIS = 125;

final int TO_Y_AXIS = 125;

final int END_OF_X_AXIS = 275;

final int END_OF_Y_AXIS = 200;

/**Default constructor*/

protected AbstractDrawFunction() {//构造函数

drawFunction();

setBackground(Color.white);

}

/**Draw the function*/

public 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 + TO_Y_AXIS, TO_X_AXIS - (int)f(x));

}

}

/**Paint the function diagram*/

protected void paintComponent(Graphics g) {

super.paintComponent(g);

// Draw x axis

g.drawLine(10, TO_X_AXIS, END_OF_X_AXIS, TO_X_AXIS);

// Draw y axis

g.drawLine(TO_Y_AXIS, 30, TO_Y_AXIS, END_OF_Y_AXIS);

// Draw arrows on x axis

g.drawLine(END_OF_X_AXIS, TO_X_AXIS, END_OF_X_AXIS - 20, TO_X_AXIS - 10);

g.drawLine(END_OF_X_AXIS, TO_X_AXIS, END_OF_X_AXIS - 20, TO_X_AXIS + 10);

// Draw arrows on y axis

g.drawLine(TO_Y_AXIS, 30, TO_Y_AXIS - 10, 50);

g.drawLine(TO_Y_AXIS, 30, TO_Y_AXIS + 10, 50);

// Draw x, y

g.drawString("X", END_OF_X_AXIS - 20, TO_X_AXIS - 30);

g.drawString("Y", TO_Y_AXIS + 20, 40);

// Draw a polygon line by connecting the points in the polygon

g.drawPolyline(p.xpoints, p.ypoints, p.npoints);

}

}

0818b9ca8b590ca3270a3433284dd417.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值