Minggu, 17 Agustus 2025

JAVA - Fractal

 





package segitigasierpinski;

 import javax.swing.*;

 import java.awt.*;

 import java.awt.event.*;


 public class SegitigaSierpinski extends JApplet {

 private JTextField jtfOrde = new JTextField("0", 5); // Orde

 private PanelSegitigaSierpinski panelSegitiga =

 new PanelSegitigaSierpinski(); // Menampilkan pola


 public SegitigaSierpinski() {

 // Panel untuk memuat label, bidang teks, dan suatu tombol

 JPanel panel = new JPanel();

 panel.add(new JLabel("Masukkan orde fraktal: "));

 panel.add(jtfOrde);

 jtfOrde.setHorizontalAlignment(SwingConstants.RIGHT);


 // Menambahkan suatu panel segitiga Sierpinski kepada applet

 add(panelSegitiga);

 add(panel, BorderLayout.SOUTH);


 // Meregistrasi suatu listener

 jtfOrde.addActionListener(new ActionListener() {

 public void actionPerformed(ActionEvent e) {

 panelSegitiga.tetapkanOrde(Integer.parseInt(jtfOrde.getText()));

 }

 });

 }


 static class PanelSegitigaSierpinski extends JPanel {

 private int orde = 0;


 /** Menetapkan suatu orde baru */

 public void tetapkanOrde(int orde) {

 this.orde = orde;

 repaint();

 }


 protected void paintComponent(Graphics g) {

 super.paintComponent(g);


 // Memilih tiga titik proporsional dengan ukuran panel

 Point p1 = new Point(getWidth() / 2, 10);

 Point p2 = new Point(10, getHeight() - 10);

 Point p3 = new Point(getWidth() - 10, getHeight() - 10);


 tampilSegitiga(g, orde, p1, p2, p3);

 }


 private static void tampilSegitiga(Graphics g, int orde,

 Point p1, Point p2, Point p3) {

 if (orde >= 0) {

 // Menggambar suatu segitiga untuk menghubungkan tiga titik

 g.drawLine(p1.x, p1.y, p2.x, p2.y);

 g.drawLine(p1.x, p1.y, p3.x, p3.y);

 g.drawLine(p2.x, p2.y, p3.x, p3.y);


 // Mendapatkan titik-tengah pada setiap sisi segitiga

 Point p12 = titikTengah(p1, p2);

 Point p23 = titikTengah(p2, p3);

 Point p31 = titikTengah(p3, p1);


 // Menampilkan secara rekursif tiga segitiga

 tampilSegitiga(g, orde - 1, p1, p12, p31);

 tampilSegitiga(g, orde - 1, p12, p2, p23);

 tampilSegitiga(g, orde - 1, p31, p23, p3);

 }

 }


 private static Point titikTengah(Point p1, Point p2) {

 return new Point((p1.x + p2.x) / 2, (p1.y + p2.y) / 2);

 }

 }

  }


Tidak ada komentar: