Hari ini saya akan menulis tentang implementasi rekursif dari koch-kepingan koch k-level (nilai k mengharuskan Anda untuk masuk secara manual). Adapun kepingan salju Koch, tolong Baidu.
Pertama, mari kita pikirkan cara menulis program ini. Saat menghitung = 0, itu harus menjadi segitiga. Tiga poin ini ditentukan sejak awal, dan perubahan di masa depan akan berkembang berdasarkan tiga poin ini. Ketika bukan 0, Anda perlu menghitung 9 poin relatif terhadap segitiga ini, yaitu dua titik di setiap tepi, dan simpul ketiga dari segitiga yang sesuai dengannya.
Pertama, tambahkan panel di jframe, dan kita perlu menggambar di panel ini.
Mari kita lihat gambar ini lagi. Gambar ini memperkenalkan proses menghitung tiga poin lainnya melalui dua poin.
Sekarang mulailah menggambar di panel:
Static Class ShowPanel memperluas jpanel {int number = 0; public void setNumber (nomor int) {this.number = angka; ulang (); } public void paintComponent (grafik g) {super.paintComponent (g); // Gambar sisi int sederhana = (int) (math.min ((int) getWidth (), (int) getHeight ())*0.8); int high = (int) (sisi*math.cos (Math.toradians (30))); Poin p1 = titik baru (getWidth () / 2, 10); Poin p2 = titik baru (getWidth () / 2 - sisi / 2, 10 + tinggi); Poin p3 = titik baru (getWidth () / 2 + sisi / 2, 10 + tinggi); playkochsnowflake (g, angka, p1, p2); playkochsnowflake (g, angka, p2, p3); playkochsnowflake (g, angka, p3, p1); }Sekarang mulailah menulis fungsi rekursif.
public static void playkochsnowflake (grafik g, nomor int, titik p1, titik p2) {if (angka == 0) {g.drawline (p1.x, p1.y, p2.x, p2.y); } else {int deltax = p2.x - p1.x; int deltay = p2.y - p1.y; Titik x = titik baru (p1.x + deltax / 3, p1.y + deltay / 3); Titik y = titik baru (p1.x + deltax * 2/3, p1.y + deltay * 2/3); Titik y = titik baru (p1.x + deltax * 2/3); Titik z = titik baru ((int) ((p1.x + p2.x) / 2 + math.sin (math.toradians (60)) * (p1.y - p2.y) / 3), (int) ((p1.y + p2.y) / 2 + math.sin (Math.toradians (60)) * (p2.x - p1) / p1) (Math.toradians (60)) * (p2.x - p1) playkochsnowflake (g, angka - 1, p1, x); playkochsnowflake (g, angka - 1, x, z); playkochsnowflake (g, angka - 1, z, y); playkochsnowflake (g, angka - 1, z); playkochsnowflake (g, angka - 1, z); playkochsnowflake (g, angka - 1, z); playkochsnowflake (g, angka - 1, z); playkochsnowflake (g, angka - 1, z); playkochsnowflake (g, angka - 1, y, p2); }}Kemudian tambahkan JTextfield JTA ke panel utama. Data yang dimasukkannya harus diteruskan ke nomor tersebut. Jadi tambahkan pendengarnya. Jika sudah ada input data, hubungi fungsi setNumber () di dalamnya untuk mengatur variabel angka.
jta.addactionListener (actionListener () {public void actionPerformed (actionEvent arg0) {spl.setNumber (integer.parseint (jta.getText ()));}}); Jadi secara keseluruhan telah selesai, dan sisanya adalah pengaturan formulir jawaban singkat.
Berikut ini kode Java yang lengkap:
impor java.awt.borderlayout; impor java.awt.flowlayout; impor java.awt.graphics; impor java.awt.point; impor java.awt.event.actionevent; impor java.awt.event.actionlistener; impor javax.swing.jframe; impor javax.swing.jlabel; impor javax.swing.jpanel; impor javax.swing.jtextfield; Snowflake kelas publik memperluas jframe {private jTextfield jta = new jTextfield (5); showpanel pribadi SPL = showpanel baru (); Static Class ShowPanel memperluas jpanel {int number = 0; public void setNumber (nomor int) {this.number = angka; ulang (); } public void paintComponent (grafik g) {super.paintComponent (g); // Gambar sisi int sederhana = (int) (math.min ((int) getWidth (), (int) getHeight ())*0.8); int high = (int) (sisi*math.cos (Math.toradians (30))); Poin p1 = titik baru (getWidth () / 2, 10); Poin p2 = titik baru (getWidth () / 2 - sisi / 2, 10 + tinggi); Poin p3 = titik baru (getWidth () / 2 + sisi / 2, 10 + tinggi); playkochsnowflake (g, angka, p1, p2); playkochsnowflake (g, angka, p2, p3); playkochsnowflake (g, angka, p3, p1); } public static void playkochsnowflake (grafik g, nomor int, titik p1, titik p2) {if (angka == 0) {g.drawline (p1.x, p1.y, p2.x, p2.y); } else {int deltax = p2.x - p1.x; int deltay = p2.y - p1.y; Titik x = titik baru (p1.x + deltax / 3, p1.y + deltay / 3); Titik y = titik baru (p1.x + deltax * 2/3, p1.y + deltay * 2/3); Titik y = titik baru (p1.x + deltax * 2/3); Titik z = titik baru ((int) ((p1.x + p2.x) / 2 + math.sin (math.toradians (60)) * (p1.y - p2.y) / 3), (int) ((p1.y + p2.y) / 2 + math.sin (Math.toradians (60)) * (p2.x - p1) / p1) (Math.toradians (60)) * (p2.x - p1) playkochsnowflake (g, angka - 1, p1, x); playkochsnowflake (g, angka - 1, x, z); playkochsnowflake (g, angka - 1, z, y); playkochsnowflake (g, angka - 1, z); playkochsnowflake (g, angka - 1, z); playkochsnowflake (g, angka - 1, z); playkochsnowflake (g, angka - 1, z); playkochsnowflake (g, angka - 1, z); playkochsnowflake (g, angka - 1, y, p2); }}} Public Snowflake () {jpanel panel = new jpanel (); panel.setLayout (flowlayout baru ()); panel.add (jlabel baru ("Harap masukkan nomor")); Panel.Add (JTA); Tambahkan (SPL, BorderLayout.Center); Tambah (panel, borderlayout.south); jta.addactionListener (actionListener () {public void actionPerformed (actionEvent arg0) {spl.setNumber (integer.parseint (jta.getText ()));}}); } public static void main (string args []) {snowflake snowflake = new Snowflake (); Snowflake.setsize (300, 300); Snowflake.settitle ("Snowflake"); Snowflake.setLocationRelativeto (null); Snowflake.setVisible (true); }}Gambar reproduksi:
Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.