오늘 저는 K- 레벨 Koch Snowflakes의 재귀 구현에 대해 쓸 것입니다 (K 값은 수동으로 입력해야합니다). Koch Snowflakes가 무엇인지에 관해서는 Baidu를 부탁드립니다.
먼저이 프로그램을 작성하는 방법에 대해 생각해 봅시다. count = 0이면 삼각형이어야합니다. 이 세 가지 점은 처음부터 결정 되며이 세 가지 점을 기준으로 향후 변화가 발전 할 것입니다. 0이 아닌 경우이 삼각형에 대한 9 점, 즉 각 가장자리의 두 점, 그에 해당하는 삼각형의 세 번째 정점을 계산해야합니다.
먼저 JFrame에 패널을 추가하면이 패널에 그림을 그려야합니다.
이 사진을 다시 살펴 보겠습니다. 이 그림은 2 점을 통해 다른 3 점을 계산하는 과정을 소개합니다.
이제 패널에서 그리기 시작하십시오.
정적 클래스 showpanel은 jpanel {int number = 0; public void setNumber (int number) {this.number = 숫자; 리 페인트 (); } public void paintcomponent (그래픽 g) {super.paintcomponent (g); // 간단한 패널 int side = (int) (math.min ((int) getWidth (), getheight ())*0.8); int high = (int) (side*math.cos (Math.Toradians (30)); 포인트 P1 = 새로운 포인트 (getWidth () / 2, 10); POINT P2 = New Point (getWidth () / 2- 측면 / 2, 10 + 높이); 포인트 P3 = 새로운 포인트 (getWidth () / 2 + 측 / 2, 10 + 높이); PlayKochsNowflake (g, 숫자, p1, p2); PlayKochsNowflake (g, 숫자, p2, p3); PlayKochsNowflake (g, 숫자, p3, p1); }이제 재귀 기능을 작성하십시오.
public static void playkochsnowflake (그래픽 g, int 번호, 포인트 p1, point 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); 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, 숫자 -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); }}그런 다음 Jtextfield JTA를 메인 패널에 추가하십시오. 입력하는 데이터는 숫자로 전달됩니다. 따라서 리스너를 추가하십시오. 이미 데이터 입력이있는 경우 숫자 변수를 설정하려면 setNumber () 함수를 호출하십시오.
jta.addactionListener (new ActionListener () {public void actionPerformed (ActionEvent Arg0) {spl.setNumber (integer.parseint (jta.getText ());}}); 따라서 전반적으로 완료되었으며 나머지는 짧은 대답 양식 설정입니다.
다음은 완전한 Java 코드입니다.
java.awt.borderlayout import; java.awt.flowlayout 가져 오기; java.awt.graphics 가져 오기; 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; 공개 클래스 Snowflake는 jframe {private jtextfield jta = New Jtextfield (5); 개인 showpanel spl = new showpanel (); 정적 클래스 showpanel은 jpanel {int number = 0; public void setNumber (int number) {this.number = 숫자; 리 페인트 (); } public void paintcomponent (그래픽 g) {super.paintcomponent (g); // 간단한 패널 int side = (int) (math.min ((int) getWidth (), getheight ())*0.8); int high = (int) (side*math.cos (Math.Toradians (30)); 포인트 P1 = 새로운 포인트 (getWidth () / 2, 10); POINT P2 = New Point (getWidth () / 2- 측면 / 2, 10 + 높이); 포인트 P3 = 새로운 포인트 (getWidth () / 2 + 측 / 2, 10 + 높이); PlayKochsNowflake (g, 숫자, p1, p2); PlayKochsNowflake (g, 숫자, p2, p3); PlayKochsNowflake (g, 숫자, p3, p1); } public static void playkochsnowflake (그래픽 g, int 번호, 포인트 p1, point 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); 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, 숫자 -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 (); PANIL.SETLAYOUT (New FlowLayout ()); PANIL.ADD (New Jlabel ( "번호를 입력하십시오")); PALEN.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.Set -Visible (True); }}생식 이미지 :
위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.