Сегодня я напишу о рекурсивной реализации снежинок Koch-уровня K (значение k требует от вас вручную). Что касается снежинок Коха, пожалуйста, Байду.
Во -первых, давайте подумаем о том, как написать эту программу. Когда count = 0, это должен быть треугольник. Эти три пункта определяются с самого начала, и будущие изменения будут развиваться на основе этих трех точек. Когда это не 0, вам нужно рассчитать 9 точек относительно этого треугольника, а именно две точки на каждом краю, и третья вершина треугольника, соответствующую ему.
Во -первых, добавьте панель в JFrame, и нам нужно нарисовать изображение на этой панели.
Давайте снова посмотрим на эту картинку. Эта картина представляет процесс расчета остальных трех точек через две точки.
Теперь начните рисовать на панели:
Static Class ShowPanel Extends jPanel {int number = 0; public void setNumber (int number) {this.number = number; Repaint (); } public void paintComponent (Graphics g) {super.paintcomponent (g); // Нарисуйте простую панель int side = (int) (math.min ((int) getWidth (), (int) getheight ())*0,8); int high = (int) (сторона*math.cos (math.toradians (30))); Точка P1 = новая точка (getWidth () / 2, 10); Точка P2 = новая точка (getWidth () / 2 - сторона / 2, 10 + высокая); Точка P3 = новая точка (getWidth () / 2 + side / 2, 10 + высокая); Playkochsnowflake (G, номер, P1, P2); Playkochsnowflake (G, номер, P2, P3); Playkochsnowflake (G, номер, P3, P1); }Теперь начните писать рекурсивные функции.
public static void playkochsnowflake (графика G, int Number, точка 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 = новая точка (P1.x + Deltax / 3, P1.Y + Deltay / 3); Точка y = новая точка (P1.x + deltax * 2/3, p1.y + deltay * 2/3); Точка y = новая точка (P1.x + deltax * 2/3); Точка z = новая точка ((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, номер - 1, P1, X); Playkochsnowflake (g, номер - 1, x, z); Playkochsnowflake (g, номер - 1, z, y); Playkochsnowflake (g, номер - 1, z); Playkochsnowflake (g, номер - 1, z); Playkochsnowflake (g, номер - 1, z); Playkochsnowflake (g, номер - 1, z); Playkochsnowflake (g, номер - 1, z); Playkochsnowflake (g, номер - 1, Y, P2); }}Затем добавьте JTemfield 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; открытый класс Snowflake расширяет JFrame {private Jtextfield JTA = new JTextField (5); Частная ShowPanel SPL = New ShowPanel (); Static Class ShowPanel Extends jPanel {int number = 0; public void setNumber (int number) {this.number = number; Repaint (); } public void paintComponent (Graphics g) {super.paintcomponent (g); // Нарисуйте простую панель int side = (int) (math.min ((int) getWidth (), (int) getheight ())*0,8); int high = (int) (сторона*math.cos (math.toradians (30))); Точка P1 = новая точка (getWidth () / 2, 10); Точка P2 = новая точка (getWidth () / 2 - сторона / 2, 10 + высокая); Точка P3 = новая точка (getWidth () / 2 + side / 2, 10 + высокая); Playkochsnowflake (G, номер, P1, P2); Playkochsnowflake (G, номер, P2, P3); Playkochsnowflake (G, номер, 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 = новая точка (P1.x + Deltax / 3, P1.Y + Deltay / 3); Точка y = новая точка (P1.x + deltax * 2/3, p1.y + deltay * 2/3); Точка y = новая точка (P1.x + deltax * 2/3); Точка z = новая точка ((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, номер - 1, P1, X); Playkochsnowflake (g, номер - 1, x, z); Playkochsnowflake (g, номер - 1, z, y); Playkochsnowflake (g, номер - 1, z); Playkochsnowflake (g, номер - 1, z); Playkochsnowflake (g, номер - 1, z); Playkochsnowflake (g, номер - 1, z); Playkochsnowflake (g, номер - 1, z); Playkochsnowflake (g, номер - 1, Y, P2); }}} public snowflake () {jpanel panel = new jpanel (); panel.setlayout (new Flowlayout ()); panel.add (new jlabel («Пожалуйста, введите номер»)); панель.add (jta); добавить (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 больше.