0
0
Lập trình
Thaycacac
Thaycacac thaycacac

Hướng dẫn vẽ đồ thị hàm số bằng JPanel trong Java

Đăng vào 2 ngày trước

• 4 phút đọc

Chủ đề:

android và java

Hướng dẫn vẽ đồ thị hàm số bằng JPanel trong Java

Chào các bạn! Hẳn rằng ai trong số chúng ta cũng đã từng phải vẽ đồ thị hàm số khi còn học trung học. Trong bài viết này, mình sẽ hướng dẫn các bạn cách sử dụng Java và JPanel để vẽ đồ thị một cách đơn giản và trực quan.

1. Tạo Class GraphPanel

Đầu tiên, chúng ta sẽ khởi tạo một lớp Java mới có tên là GraphPanel.java và yêu cầu nó kế thừa từ lớp JPanel. Đây là lớp chúng ta sẽ sử dụng để vẽ đồ thị.

java Copy
public class GraphPanel extends JPanel {}

2. Tạo Khung JFrame

Trong lớp GraphPanel.java, chúng ta sẽ tạo một phương thức main để khởi chạy ứng dụng. Chúng ta sẽ tạo một đối tượng JFrame với kích thước 400x400 pixel như trong đoạn mã dưới đây:

java Copy
public static void main(String[] args) {
    JFrame frame = new JFrame();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.add(new GraphPanel());
    frame.setSize(400, 400);
    frame.setLocationRelativeTo(null);
    frame.setVisible(true);
}

3. Thêm Phương Thức paintComponent

Tiếp theo, chúng ta sẽ thêm phương thức paintComponent vào lớp GraphPanel.java. Đây là phương thức được kéo từ lớp JPanel, giúp chúng ta vẽ lên trên JPanel. Chúng ta sẽ sử dụng Graphics2D để có công cụ tốt hơn trong việc vẽ hình học.

java Copy
@Override
protected void paintComponent(Graphics g) {
    super.paintComponent(g);
    Graphics2D g2 = (Graphics2D) g;

    int width = getWidth();
    int height = getHeight();
    int margin = 50;
}

4. Tạo Lưới (Tùy Chọn)

Nếu bạn thích, có thể thêm một hệ thống lưới vào đồ thị để dễ hình dung hơn. Đoạn mã dưới đây sẽ vẽ các đường thẳng từ trái sang phải và từ trên xuống dưới.

java Copy
    // Vẽ lưới
    g2.setPaint(Color.LIGHT_GRAY);
    for (int i = 0; i < width; i += 50) {
        g2.draw(new Line2D.Double(i, 0, i, height));
    }
    for (int i = height; i > 0; i -= 50) {
        g2.draw(new Line2D.Double(0, i, width, i));
    }

5. Vẽ Trục X và Trục Y

Để vẽ trục X và Y, chúng ta sẽ sử dụng phương thức g2.draw với Line2D.Double. Dưới đây là cách xác định và vẽ các trục:

java Copy
    // Vẽ trục X và Y
    g2.setPaint(Color.BLACK);
    g2.draw(new Line2D.Double(x1, y1, x2, y2));
    g2.draw(new Line2D.Double(x3, y3, x4, y4));

    // Vẽ mũi tên cho trục X
    g2.setPaint(Color.RED);
    g2.draw(new Line2D.Double(x4, y4, x4 - 10, y4 - 5));
    g2.draw(new Line2D.Double(x4, y4, x4 - 10, y4 + 5));
    g.drawString("X", x4 - 10, y4 - 10);

    // Vẽ mũi tên cho trục Y
    g2.setPaint(Color.RED);
    g2.draw(new Line2D.Double(x1, y1, x1 - 5, y1 + 10));
    g2.draw(new Line2D.Double(x1, y1, x1 + 5, y1 + 10));
    g.drawString("Y", x1 - 10, y1);

6. Vẽ Đồ Thị Parabol

Bây giờ chúng ta sẽ tính toán các điểm trên đồ thị parabol và nối lại với nhau. Để làm điều này, chúng ta sẽ tạo một vòng lặp chạy từ -100 đến 100 với bước 10. Đoạn mã dưới đây cho phép vẽ các điểm dữ liệu:

java Copy
    g2.setPaint(Color.BLUE);
    boolean firstDot = true;
    double lastX = 0.0;
    double lastY = 0.0;
    for (int i = -100; i <= 100; i+=10) {
        double x = centerX + i;
        double y = centerY - (0.01 * this.parabol(i));
        if(firstDot) {
            g2.fill(new Ellipse2D.Double(x - 2, y - 2, 4, 4));
            firstDot = false;
        } else {
            g2.draw(new Line2D.Double(lastX, lastY, x, y));
        }
        lastX = x;
        lastY = y;
    }

7. Hàm Parabol

Cuối cùng, chúng ta sẽ định nghĩa hàm parabol để tính toán giá trị y từ x. Bạn có thể thực hiện theo hàm dưới đây và xem cách đồ thị được hiển thị:

java Copy
// Công thức y = x^2
private double parabol(double x) {
    return x*x;
}

Ngoài ra, bạn cũng có thể thử nghiệm với hàm khác như sau:

java Copy
// Công thức y = x * sin(x^2) + 1
private double ASinX2PlusOne(double x) {
    return (x * Math.sin(x*x) + 1);
}

Với các bước trên, bạn đã tạo ra một chương trình vẽ đồ thị cơ bản bằng JPanel. Cảm ơn các bạn đã theo dõi bài viết, hy vọng nó sẽ hữu ích cho các bạn trong việc tìm hiểu về Java và đồ họa!

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào