Heute werde ich über die rekursive Implementierung von Koch-Schneeflocken auf K-Ebene schreiben (K-Wert erfordert, dass Sie manuell eintreten). Was Koch Snowflakes betrifft, bitte Baidu.
Lassen Sie uns zunächst darüber nachdenken, wie Sie dieses Programm schreiben. Wenn Count = 0, sollte es ein Dreieck sein. Diese drei Punkte werden von Anfang an bestimmt und zukünftige Änderungen werden sich basierend auf diesen drei Punkten entwickeln. Wenn es nicht 0 ist, müssen Sie die 9 Punkte relativ zu diesem Dreieck berechnen, nämlich die beiden Punkte an jeder Kante und den dritten Scheitelpunkt des ihm entsprechenden Dreiecks.
Fügen Sie zunächst ein Panel in JFrame hinzu, und wir müssen ein Bild auf diesem Panel zeichnen.
Schauen wir uns dieses Bild noch einmal an. Dieses Bild führt den Prozess der Berechnung der anderen drei Punkte durch zwei Punkte ein.
Zeichnen Sie nun im Panel: Zeichnen Sie:
statische Klasse ShowPanel erweitert JPanel {int nummer = 0; public void setNumber (int nummer) {this.number = number; Repaint (); } public void PaintComponent (Grafik g) {Super.PaintComponent (g); // Zeichnen Sie ein einfaches Panel int Side = (int) (math.min ((int) getWidth (), (int) geteight ())*0,8); int hoch = (int) (Seite*math.cos (math.toradians (30))); Punkt p1 = neuer Punkt (Getwidth () / 2, 10); Punkt P2 = neuer Punkt (Getwidth () / 2 - Seite / 2, 10 + hoch); Punkt p3 = neuer Punkt (GetWidth () / 2 + Seite / 2, 10 + hoch); Playkochsnowflake (G, Nummer, p1, p2); Playkochsnowflake (G, Nummer, p2, p3); Playkochsnowflake (G, Nummer, p3, p1); }Schreiben Sie nun rekursive Funktionen.
public static void Playkochsnowflake (Grafik G, int -Nummer, Punkt P1, Punkt P2) {if (number == 0) {g.drawline (p1.x, p1.y, p2.x, p2.y); } else {int deltax = p2.x - p1.x; int deltay = p2.y - p1.y; Punkt x = neuer Punkt (p1.x + deltax / 3, p1.y + deltay / 3); Punkt y = neuer Punkt (p1.x + deltax * 2/3, p1.y + deltay * 2 /3); Punkt y = neuer Punkt (p1.x + deltax * 2/3); Punkt z = neuer Punkt ((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.x) / 3); Playkochsnowflake (G, Nummer - 1, p1, x); Playkochsnowflake (G, Nummer - 1, x, z); Playkochsnowflake (G, Nummer - 1, z, y); Playkochsnowflake (G, Nummer - 1, z); Playkochsnowflake (G, Nummer - 1, z); Playkochsnowflake (G, Nummer - 1, z); Playkochsnowflake (G, Nummer - 1, z); Playkochsnowflake (G, Nummer - 1, z); Playkochsnowflake (G, Nummer - 1, y, p2); }}Fügen Sie dann ein JTextField JTA zum Hauptfeld hinzu. Die Daten, die sie eingeben, sollen in die Nummer übergeben werden. Fügen Sie also einen Zuhörer hinzu. Wenn bereits Dateneingaben vorhanden sind, rufen Sie die Funktion "setNumber () in sie auf, um die Zahlenvariable festzulegen.
jta.addactionListener (new actionListener () {public void actionPerformed (actionEvent arg0) {spl.setNumber (Integer.ParseInt (jta.getText ()));}}); Insgesamt wurde es also abgeschlossen und der Rest sind die kurzen Antwortformulareinstellungen.
Hier ist ein vollständiger Java -Code:
Import Java.awt.BorderLayout; import Java.awt.flowlayout; importieren java.awt.graphics; Import Java.awt.Point; import Java.awt.event.ActionEvent; import Java.awt.event.ActionListener; importieren javax.swing.jframe; import Javax.swing.jlabel; import Javax.swing.jpanel; importieren javax.swing.jtextfield; Public Class Snowflake erweitert JFrame {private jTextfield jta = new JTextField (5); private showpanel spl = new showpanel (); statische Klasse ShowPanel erweitert JPanel {int nummer = 0; public void setNumber (int nummer) {this.number = number; Repaint (); } public void PaintComponent (Grafik g) {Super.PaintComponent (g); // Zeichnen Sie ein einfaches Panel int Side = (int) (math.min ((int) getWidth (), (int) geteight ())*0,8); int hoch = (int) (Seite*math.cos (math.toradians (30))); Punkt p1 = neuer Punkt (Getwidth () / 2, 10); Punkt P2 = neuer Punkt (Getwidth () / 2 - Seite / 2, 10 + hoch); Punkt p3 = neuer Punkt (GetWidth () / 2 + Seite / 2, 10 + hoch); Playkochsnowflake (G, Nummer, p1, p2); Playkochsnowflake (G, Nummer, p2, p3); Playkochsnowflake (G, Nummer, p3, p1); } public static void Playkochsnowflake (Grafik G, int Nummer, Punkt P1, Punkt P2) {if (number == 0) {g.drawline (p1.x, p1.y, p2.x, p2.y); } else {int deltax = p2.x - p1.x; int deltay = p2.y - p1.y; Punkt x = neuer Punkt (p1.x + deltax / 3, p1.y + deltay / 3); Punkt y = neuer Punkt (p1.x + deltax * 2/3, p1.y + deltay * 2 /3); Punkt y = neuer Punkt (p1.x + deltax * 2/3); Punkt z = neuer Punkt ((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.x) / 3); Playkochsnowflake (G, Nummer - 1, p1, x); Playkochsnowflake (G, Nummer - 1, x, z); Playkochsnowflake (G, Nummer - 1, z, y); Playkochsnowflake (G, Nummer - 1, z); Playkochsnowflake (G, Nummer - 1, z); Playkochsnowflake (G, Nummer - 1, z); Playkochsnowflake (G, Nummer - 1, z); Playkochsnowflake (G, Nummer - 1, z); Playkochsnowflake (G, Nummer - 1, y, p2); }}} public snowflake () {jpanel panel = new jpanel (); panel.setLayout (neuer FlowLayout ()); panel.Add (New JLabel ("Bitte geben Sie die Nummer ein)); panel.Add (jta); add (spl, borderLayout.center); Add (Panel, BorderLayout.South); jta.addactionListener (new 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); }}Reproduktionsbild:
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.