Hoje vou escrever sobre a implementação recursiva dos flocos de neve Koch de nível K (K Value exige que você entre manualmente). Quanto ao que são flocos de neve Koch, por favor, Baidu.
Primeiro, vamos pensar em como escrever este programa. Quando contagem = 0, deve ser um triângulo. Esses três pontos são determinados desde o início e as mudanças futuras se desenvolverão com base nesses três pontos. Quando não é 0, você precisa calcular os 9 pontos em relação a esse triângulo, a saber, os dois pontos em cada borda e o terceiro vértice do triângulo correspondente a ele.
Primeiro, adicione um painel no JFrame e precisamos desenhar uma figura neste painel.
Vamos dar uma olhada nesta foto novamente. Esta imagem apresenta o processo de calcular os outros três pontos através de dois pontos.
Agora comece a desenhar no painel:
classe estática ShowPanel estende JPanel {int number = 0; public void SetNumber (INT número) {this.number = número; repintar (); } public void PaintComponent (Gráfico G) {super.PaintComponent (g); // desenhe um painel simples int side = (int) (math.min ((int) getWidth (), (int) getheight ())*0.8); int alto = (int) (lado*math.cos (math.toradians (30))); Ponto p1 = novo ponto (getWidth () / 2, 10); Ponto p2 = novo ponto (getWidth () / 2 - lado / 2, 10 + alto); Ponto p3 = novo ponto (getWidth () / 2 + lateral / 2, 10 + alto); playkochsnowflake (g, número, p1, p2); playkochsnowflake (g, número, p2, p3); playkochsnowflake (g, número, p3, p1); }Agora comece a escrever funções recursivas.
public static void playkochsnowflake (gráficos G, número int, ponto P1, ponto P2) {if (número == 0) {g.drawline (p1.x, p1.y, p2.x, p2.y); } else {int deltax = p2.x - p1.x; int deltay = p2.y - p1.y; Ponto x = novo ponto (p1.x + deltax / 3, p1.y + deltay / 3); Ponto y = novo ponto (p1.x + deltax * 2/3, p1.y + deltay * 2/3); Ponto y = novo ponto (p1.x + deltax * 2/3); Ponto z = novo ponto ((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) / 3) / 3) / 3) / 3) / 3) / 3) * (P2.x - p1.x) / 3) / 3) / 3) playkochsnowflake (g, número - 1, p1, x); playkochsnowflake (G, número - 1, x, z); playkochsnowflake (g, número - 1, z, y); playkochsnowflake (G, número - 1, z); playkochsnowflake (G, número - 1, z); playkochsnowflake (G, número - 1, z); playkochsnowflake (G, número - 1, z); playkochsnowflake (G, número - 1, z); playkochsnowflake (G, número - 1, y, p2); }}Em seguida, adicione um JTextfield JTA ao painel principal. Os dados que ele entram devem ser transmitidos para o número. Portanto, adicione um ouvinte a ele. Se já houver entrada de dados, ligue para a função setNumber () para definir a variável número.
JTA.addactionListener (new ActionListener () {public void ActionPerformed (ActionEvent Arg0) {spl.SetNumber (Integer.parseint (jta.getText ()));}}); No geral, foi concluído e o restante é as configurações de formulário de resposta curta.
Aqui está um código Java completo:
importar java.awt.borderlayout; importar java.awt.flowlayout; importar java.awt.graphics; importar java.awt.point; importar java.awt.event.actionEvent; importar java.awt.event.actionListener; importar javax.swing.jframe; importar javax.swing.jlabel; importar javax.swing.jpanel; importar javax.swing.jtextfield; classe pública Snowflake estende JFrame {private JTextfield JTA = new JTextfield (5); ShowPanel privado spl = new ShowPanel (); classe estática ShowPanel estende JPanel {int number = 0; public void SetNumber (INT número) {this.number = número; repintar (); } public void PaintComponent (Gráfico G) {super.PaintComponent (g); // desenhe um painel simples int side = (int) (math.min ((int) getWidth (), (int) getheight ())*0.8); int alto = (int) (lado*math.cos (math.toradians (30))); Ponto p1 = novo ponto (getWidth () / 2, 10); Ponto p2 = novo ponto (getWidth () / 2 - lado / 2, 10 + alto); Ponto p3 = novo ponto (getWidth () / 2 + lateral / 2, 10 + alto); playkochsnowflake (g, número, p1, p2); playkochsnowflake (g, número, p2, p3); playkochsnowflake (g, número, p3, p1); } public static void playkochsnowflake (gráficos g, número int, ponto P1, ponto P2) {if (número == 0) {g.drawline (p1.x, p1.y, p2.x, p2.y); } else {int deltax = p2.x - p1.x; int deltay = p2.y - p1.y; Ponto x = novo ponto (p1.x + deltax / 3, p1.y + deltay / 3); Ponto y = novo ponto (p1.x + deltax * 2/3, p1.y + deltay * 2/3); Ponto y = novo ponto (p1.x + deltax * 2/3); Ponto z = novo ponto ((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) / 3) / 3) / 3) / 3) / 3) / 3) * (P2.x - p1.x) / 3) / 3) / 3) playkochsnowflake (g, número - 1, p1, x); playkochsnowflake (G, número - 1, x, z); playkochsnowflake (g, número - 1, z, y); playkochsnowflake (G, número - 1, z); playkochsnowflake (G, número - 1, z); playkochsnowflake (G, número - 1, z); playkochsnowflake (G, número - 1, z); playkochsnowflake (G, número - 1, z); playkochsnowflake (G, número - 1, y, p2); }}} public snowflake () {jpanel painel = new jpanel (); painel.setLayout (new FlowLayout ()); painel.add (New Jlabel ("Por favor, insira o número")); painel.add (JTA); add (spl, borderlayout.center); add (painel, 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 (nulo); snowflake.setvisible (verdadeiro); }}Imagem de reprodução:
O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.