Aujourd'hui, j'écrirai sur l'implémentation récursive des flocons de neige Koch de niveau K (la valeur k vous oblige à entrer manuellement). Quant à ce que sont les flocons de neige Koch, s'il vous plaît Baidu.
Tout d'abord, réfléchissons à la façon d'écrire ce programme. Lorsque le nombre = 0, ce devrait être un triangle. Ces trois points sont déterminés dès le début, et les changements futurs se développeront en fonction de ces trois points. Quand il n'est pas 0, vous devez calculer les 9 points par rapport à ce triangle, à savoir les deux points sur chaque bord et le troisième sommet du triangle qui lui correspond.
Tout d'abord, ajoutez un panneau dans JFrame et nous devons dessiner une image sur ce panneau.
Jetons un coup d'œil à cette photo. Cette image introduit le processus de calcul des trois autres points par deux points.
Commencez maintenant à dessiner dans le panneau:
La classe statique ShowPanel étend JPanel {int number = 0; public void setNumber (int numéro) {this.number = nombre; repeindre(); } public void peintComponent (graphiques g) {super.paintcomponent (g); // dessiner un panneau simple int Side = (int) (math.min ((int) getWidth (), (int) getheight ()) * 0,8); int high = (int) (côté * math.cos (math.toradians (30))); Point P1 = nouveau point (getWidth () / 2, 10); Point p2 = nouveau point (getWidth () / 2 - côté / 2, 10 + haut); Point p3 = nouveau point (getWidth () / 2 + côté / 2, 10 + haut); playkochsNowFlake (g, numéro, p1, p2); playkochsnowflake (g, numéro, p2, p3); playkochsNowFlake (g, numéro, p3, p1); }Maintenant, commencez à écrire des fonctions récursives.
public static void playkochsnowflake (graphiques g, numéro int, point p1, point p2) {if (nombre == 0) {g.drawline (p1.x, p1.y, p2.x, p2.y); } else {int deltax = p2.x - p1.x; int deltay = p2.y - p1.y; Point x = nouveau point (p1.x + deltax / 3, p1.y + deltay / 3); Point y = nouveau point (p1.x + deltax * 2/3, p1.y + deltay * 2/3); Point y = nouveau point (p1.x + deltax * 2/3); Point z = nouveau point ((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, nombre - 1, p1, x); playkochsNowFlake (g, nombre - 1, x, z); playkochsNowFlake (g, nombre - 1, z, y); playkochsNowFlake (g, nombre - 1, z); playkochsNowFlake (g, nombre - 1, z); playkochsNowFlake (g, nombre - 1, z); playkochsNowFlake (g, nombre - 1, z); playkochsNowFlake (g, nombre - 1, z); playkochsNowFlake (g, nombre - 1, y, p2); }}Ajoutez ensuite un JTETHFIELD JTA au panneau principal. Les données dans lesquelles il entre doivent être transmises dans le nombre. Alors ajoutez un auditeur. S'il y a déjà une entrée de données, appelez la fonction setNumber () pour définir la variable de numéro.
jta.addactionListener (new ActionListener () {public void ActionPerformed (ActionEvent arg0) {spl.setNumber (Integer.Parseint (jta.getText ()));}}); Donc, dans l'ensemble, il a été achevé, et le reste est les paramètres du formulaire de réponse courts.
Voici un code Java complet:
import java.awt.borderLayout; import java.awt.flowlayout; import java.awt.graphics; Importer java.awt.point; import java.awt.event.actionEvent; import java.awt.event.actionListener; import javax.swing.jframe; import javax.swing.jlabel; import javax.swing.jpanel; import javax.swing.jtextfield; La classe publique SnowFlake étend JFrame {private jTextfield jta = new JTextfield (5); private showPanel spl = new showPanel (); La classe statique ShowPanel étend JPanel {int number = 0; public void setNumber (int numéro) {this.number = nombre; repeindre(); } public void peintComponent (graphiques g) {super.paintcomponent (g); // dessiner un panneau simple int Side = (int) (math.min ((int) getWidth (), (int) getheight ()) * 0,8); int high = (int) (côté * math.cos (math.toradians (30))); Point P1 = nouveau point (getWidth () / 2, 10); Point p2 = nouveau point (getWidth () / 2 - côté / 2, 10 + haut); Point p3 = nouveau point (getWidth () / 2 + côté / 2, 10 + haut); playkochsNowFlake (g, numéro, p1, p2); playkochsnowflake (g, numéro, p2, p3); playkochsNowFlake (g, numéro, p3, p1); } public static void playkochsnowflake (graphiques g, numéro int, point p1, point p2) {if (nombre == 0) {g.drawline (p1.x, p1.y, p2.x, p2.y); } else {int deltax = p2.x - p1.x; int deltay = p2.y - p1.y; Point x = nouveau point (p1.x + deltax / 3, p1.y + deltay / 3); Point y = nouveau point (p1.x + deltax * 2/3, p1.y + deltay * 2/3); Point y = nouveau point (p1.x + deltax * 2/3); Point z = nouveau point ((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, nombre - 1, p1, x); playkochsNowFlake (g, nombre - 1, x, z); playkochsNowFlake (g, nombre - 1, z, y); playkochsNowFlake (g, nombre - 1, z); playkochsNowFlake (g, nombre - 1, z); playkochsNowFlake (g, nombre - 1, z); playkochsNowFlake (g, nombre - 1, z); playkochsNowFlake (g, nombre - 1, z); playkochsNowFlake (g, nombre - 1, y, p2); }}} public Snowflake () {jpanel Panel = new JPanel (); panneau.SetLayout (new FlowLayout ()); PANNEL.ADD (New JLabel ("Veuillez saisir le numéro")); PANNEL.ADD (JTA); Add (spl, borderlayout.center); Add (panneau, 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); }}Image de reproduction:
Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.