今日は、KレベルのKoch Snowflakesの再帰的実装について書きます(K値では手動で入力する必要があります)。 Koch Snowflakesとは何かについては、Baiduをお願いします。
まず、このプログラムの作成方法について考えてみましょう。 count = 0の場合、三角形である必要があります。これらの3つのポイントは最初から決定され、将来の変更はこれらの3つのポイントに基づいて開発されます。 0ではない場合は、この三角形に比べて9ポイント、つまり各エッジの2つのポイントと、それに対応する三角形の3番目の頂点を計算する必要があります。
まず、JFrameにパネルを追加すると、このパネルに絵を描く必要があります。
もう一度この写真を見てみましょう。この写真は、他の3つのポイントを2つのポイントで計算するプロセスを紹介します。
パネルで描画を開始します。
静的クラスのshowpanelはjpanelを拡張します{int number = 0; public void setnumber(int number){this.number = number; Repaint(); } public void paintComponent(Graphics G){super.PaintComponent(g); // simple Panel int side =(int)(math.min((int)getWidth()、(int)getheigh())*0.8); int high =(int)(side*math.cos(math.toradians(30)));ポイントp1 = new Point(getWidth() / 2、10);ポイントP2 = new Point(getWidth() / 2 -Side / 2、10 + High);ポイントp3 = new Point(getWidth() / 2 + Side / 2、10 + High); playkochsnowflake(g、number、p1、p2); Playkochsnowflake(g、number、p2、p3); Playkochsnowflake(g、number、p3、p1); }再帰関数の作成を開始します。
public static void playkochsnowflake(グラフィックスG、int番号、ポイントP1、ポイント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;ポイントx = new Point(p1.x + deltax / 3、p1.y + deltay / 3);ポイントy = new Point(p1.x + deltax * 2/3、p1.y + deltay * 2/3);ポイントy = new Point(p1.x + deltax * 2/3); Point Z = new 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、number -1、p1、x); playkochsnowflake(g、number -1、x、z); playkochsnowflake(g、number -1、z、y); playkochsnowflake(g、number -1、z); playkochsnowflake(g、number -1、z); playkochsnowflake(g、number -1、z); playkochsnowflake(g、number -1、z); playkochsnowflake(g、number -1、z); playkochsnowflake(g、number -1、y、p2); }}次に、JTextfield JTAをメインパネルに追加します。入力するデータは、番号に渡されることです。リスナーを追加してください。既にデータ入力がある場合は、その中のsetNumber()関数を呼び出して、数値変数を設定します。
Jta.AddActionListener(new ActionListener(){public void ActionPerformed(ActionEvent Arg0){spl.setNumber(integer.parseint(jta.getText());}});そのため、全体的に完了しており、残りは短い回答形式の設定です。
これが完全なJavaコードです:
java.awt.borderlayoutをインポートします。 java.awt.flowlayoutをインポートします。 java.awt.graphicsをインポートします。 java.awt.pointをインポートします。 java.awt.event.actioneventをインポートします。 java.awt.event.actionlistenerをインポートします。 javax.swing.jframeをインポートします。 javax.swing.jlabelをインポートします。 javax.swing.jpanelをインポートします。 javax.swing.jtextfieldをインポートします。パブリッククラスのスノーフレークはjframeを拡張します{private jtextfield jta = new jtextfield(5);プライベートショーパネルspl = new Showpanel();静的クラスのshowpanelはjpanelを拡張します{int number = 0; public void setnumber(int number){this.number = number; Repaint(); } public void paintComponent(Graphics G){super.PaintComponent(g); // simple Panel int side =(int)(math.min((int)getWidth()、(int)getheigh())*0.8); int high =(int)(side*math.cos(math.toradians(30)));ポイントp1 = new Point(getWidth() / 2、10);ポイントP2 = new Point(getWidth() / 2 -Side / 2、10 + High);ポイントp3 = new Point(getWidth() / 2 + Side / 2、10 + High); playkochsnowflake(g、number、p1、p2); Playkochsnowflake(g、number、p2、p3); Playkochsnowflake(g、number、p3、p1); } public static void playkochsnowflake(グラフィックG、int番号、ポイントP1、ポイント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;ポイントx = new Point(p1.x + deltax / 3、p1.y + deltay / 3);ポイントy = new Point(p1.x + deltax * 2/3、p1.y + deltay * 2/3);ポイントy = new Point(p1.x + deltax * 2/3); Point Z = new 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、number -1、p1、x); playkochsnowflake(g、number -1、x、z); playkochsnowflake(g、number -1、z、y); playkochsnowflake(g、number -1、z); playkochsnowflake(g、number -1、z); playkochsnowflake(g、number -1、z); playkochsnowflake(g、number -1、z); playkochsnowflake(g、number -1、z); playkochsnowflake(g、number -1、y、p2); }}} public Snowflake(){jPanel Panel = new JPanel(); panel.setLayout(new FlowLayout()); panel.add(new Jlabel( "番号を入力してください")); panel.add(jta); add(spl、borderlayout.center);追加(パネル、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); }}複製画像:
上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。