分6种情况进行讨论:
分六种情况进行讨论:
1、 线与水平线所成角度为0°,在其上方生成一个角:
方法:kochcurve0_up(int x1, int y1, int x2, int y2,int k)
再分别对线段AB,CD,BE,EC进行递归操作,
kochcurve0_up(x1,y1,x3,y1,k);//对AB进行递归操作
kochcurve0_up(x4,y1,x2,y2,k); //对CD进行递归操作
kochcurve60_left(x3,y1,x5,y5,k); //对BE进行递归操作
kochcurve120_right(x5,y5,x4,y1,k); //对EC进行递归操作
最后,画出线段AB,BE,EC,CD
2、 线与水平线所成角度为120°,在其右边生成一个角:
方法:kochcurve120_right(int x5, int y5, int x4, int y1, int k)
再分别对线段EF,GC,FH,GH进行递归操作,
kochcurve0_up(x9,y9,x10,y10,k); //对FH进行递归操作
kochcurve60_right(x11,y11,x10,y10,k); //对GH进行递归操作
kochcurve120_right(x5,y5,x9,y9,k); //对EF进行递归操作
kochcurve120_right(x11,y11,x4,y1,k); //对GC进行递归操作
最后,画出线段EF,GC,FH,GH
3、 线与水平线所成角度为60°,在其右边生成一个角:
方法:kochcurve60_right(int x11, int y11, int x10, int y10,int k)
4、线与水平线所成角度为0°,在其下方生成一个角:
方法::kochcurve0_down(int x12, int y12, int x14, int y14, int k)
4、 线与水平线所成角度为60°,在其左边生成一个角:
方法:kochcurve60_left(int x3, int y1, int x5, int y5, int k)
5、 线与水平线所成角度为120°,在其左边生成一个角:
方法:kochcurve120_left(int x8, int y8, int x7, int y7, int k)
/********科赫曲线方法****************/ //在线(0度)的上方生成图形的函数 void kochcurve0_up(int x1, int y1, int x2, int y2,int k) { if(k==0){ g.drawLine(x1, y1, x2, y2); }else{ int x3=x1+Math.abs(x2-x1)/3; int x4=x1+2*Math.abs(x2-x1)/3; int x5=x1+Math.abs(x2-x1)/2; int y5=(int) (y1-Math.sqrt(3)*Math.abs(x3-x1)/2); // g.drawLine(x3, y1, x5, y5); // g.drawLine(x5, y5, x4, y2); // g.drawLine(x3, y1, x4, y1); // g.setColor(Color.BLACK); // g.drawLine(x3, y1, x4, y1); g.setColor(Color.GREEN); k--; if(k>0){ kochcurve0_up(x1,y1,x3,y1,k); kochcurve0_up(x4,y1,x2,y2,k); kochcurve60_left(x3,y1,x5,y5,k); kochcurve120_right(x5,y5,x4,y1,k); } else { g.drawLine(x3, y1, x5, y5); g.drawLine(x5, y5, x4, y2); g.drawLine(x1, y1, x3, y1); g.drawLine(x4, y1, x2, y2); } } } //在线(120度)的右侧生成图形的函数 void kochcurve120_right(int x5, int y5, int x4, int y1, int k) { int a=mathline(x5,y5,x4,y1); int x9=x5+a/6; int y9=(int) (y1-Math.sqrt(3)*a/3); int x11=x5+a/3; int y11=(int) (y1-Math.sqrt(3)*a/6); int x10=x9+mathline(x9,y9,x11,y11); int y10=y9; // g.drawLine(x9, y9, x10, y10); // g.drawLine(x11, y11, x10, y10); // g.setColor(Color.BLACK); // g.drawLine(x9-1, y9, x11-1, y11); // g.drawLine(x9+1, y9, x11+1, y11); g.setColor(Color.GREEN); k--; if(k>0){ kochcurve0_up(x9,y9,x10,y10,k); kochcurve60_right(x11,y11,x10,y10,k); kochcurve120_right(x5,y5,x9,y9,k); kochcurve120_right(x11,y11,x4,y1,k); } else { g.drawLine(x9, y9, x10, y10); g.drawLine(x11, y11, x10, y10); g.drawLine(x5, y5, x9, y9); g.drawLine(x11, y11, x4, y1); } } //在线(60度)的右侧生成图形的函数 void kochcurve60_right(int x11, int y11, int x10, int y10, int k) { if(k==0){ g.drawLine(x10, y10, x11, y11); }else{ int a=mathline(x11,y11,x10,y10); int x12=x11+a/6; int y12=(int) (y11-Math.sqrt(3)*a/6); int x13=x11+a/3; int y13=(int) (y11-Math.sqrt(3)*a/3); int x14=x12+a/3; int y14=y12; // g.drawLine(x13, y13, x14, y14); // g.drawLine(x12, y12, x14, y14); // g.setColor(Color.BLACK); // g.drawLine(x13-1,y13,x12-1,y12); // g.drawLine(x13+1,y13,x12+1,y12); g.setColor(Color.GREEN); k--; if(k>0){ kochcurve0_down(x12,y12,x14,y14,k); kochcurve120_right(x13,y13,x14,y14,k); kochcurve60_right(x11,y11,x12,y12,k); kochcurve60_right(x13,y13,x10,y10,k); } else { g.drawLine(x13, y13, x14, y14); g.drawLine(x12, y12, x14, y14); g.drawLine(x10,y10,x13,y13); g.drawLine(x11, y11, x12, y12); } } } //在线(0度)的下方生成图形的函数 void kochcurve0_down(int x12, int y12, int x14, int y14, int k) { int a=mathline(x12,y12,x14,y14); int x18=x12+a/3; int y18=y12; int x19=x12+2*a/3; int y19=y12; int x20=(x12+x14)/2; int y20=(int) (y12+Math.sqrt(3)*a/6); // g.drawLine(x19, y19, x20, y20); // g.drawLine(x18, y18, x20, y20); // g.setColor(Color.BLACK); // g.drawLine(x18,y18,x19,y19); g.setColor(Color.GREEN); k--; if(k>0){ kochcurve120_left(x18,y18,x20,y20,k); kochcurve60_right(x20,y20,x19,y19,k); kochcurve0_down(x12,y12,x18,y18,k); kochcurve0_down(x19,y19,x14,y14,k); } else { g.drawLine(x19, y19, x20, y20); g.drawLine(x18, y18, x20, y20); g.drawLine(x12, y12, x18, y18); g.drawLine(x14,y14,x19,y19); } } //在线(60度)的左侧生成图形的函数 void kochcurve60_left(int x3, int y1, int x5, int y5, int k) { int a=mathline(x3,y1,x5,y5); int x7=x3+a/6; int y7=(int) (y1-Math.sqrt(3)*a/6); int x6=x3+a/3; int y6=(int) (y1-Math.sqrt(3)*a/3); int x8=x6-mathline(x7,y7,x6,y6); int y8=y6; System.out.println("x5="+x5); System.out.println("x6="+x6); System.out.println("x7="+x7); System.out.println("x8="+x8); // g.drawLine(x7, y7, x8, y8); // g.drawLine(x8, y8, x6, y6); // g.setColor(Color.BLACK); // g.drawLine(x6-1,y6,x7-1,y7); // g.drawLine(x6,y6,x7,y7); // g.drawLine(x6+1,y6,x7+1,y7); g.setColor(Color.GREEN); k--; if(k>0){ kochcurve0_up(x8,y8,x6,y6,k); kochcurve120_left(x8,y8,x7,y7,k); kochcurve60_left(x3,y1,x7,y7,k); kochcurve60_left(x6,y6,x5,y5,k); } else { g.drawLine(x7, y7, x8, y8); g.drawLine(x8, y8, x6, y6); g.drawLine(x3, y1, x7, y7); g.drawLine(x5,y5,x6,y6); } } //在线(120度)的左侧生成图形的函数 void kochcurve120_left(int x8, int y8, int x7, int y7, int k) { if(k==0){ g.drawLine(x7,y7,x8,y8); }else{ int a=mathline(x8,y8,x7,y7); int x15=x7-a/6; int y15=(int) (y7-Math.sqrt(3)*a/6); int x16=x7-a/3; int y16=(int) (y7-Math.sqrt(3)*a/3); int x17=x15-a/3; int y17=y15; // g.drawLine(x16, y16, x17, y17); // g.drawLine(x15, y15, x17, y17); // g.setColor(Color.BLACK); // System.out.println("x15="+x15); // System.out.println("y15="+y15); // g.drawLine(x15, y15, x16, y16); // g.drawLine(x15+1, y15, x16+1, y16); // g.drawLine(x15-1, y15, x16-1, y16); g.setColor(Color.GREEN); k--; if(k>0){ kochcurve60_left(x17,y17,x16,y16,k); kochcurve0_down(x17,y17,x15,y15,k); kochcurve120_left(x8,y8,x16,y16,k); kochcurve120_left(x15,y15,x7,y7,k); } else { g.drawLine(x16, y16, x17, y17); g.drawLine(x15, y15, x17, y17); g.drawLine(x8,y8,x16,y16); g.drawLine(x7,y7,x15,y15); } } } /**********科赫曲线方法结束***********/ //计算一条直线的长度的函数 private int mathline(int x3, int y1, int x5, int y5) { int line=(int) Math.sqrt(Math.pow((x5-x3), 2)+Math.pow((y5-y1), 2)); return line; }
相关推荐
科赫曲线的绘制
科赫曲线matlab程序代码,仅供了解原理,了解迭代过程。
这是一个用MATLAB语言写的生成科赫曲线的程序,其中科赫曲线是分形理论中的常见图形。
科赫曲线的MATLAB代码 不含M文件
NULL 博文链接:https://yangzhenlin.iteye.com/blog/1835776
科赫曲线.py
使用python turtle库完成科赫曲线绘制
科赫曲线绘制.exe
python设计科赫曲线分形树
L系统_重写系统_希尔伯特曲线_谢尔宾斯基三角形_科赫曲线_雪花曲线
通过选择迭代次数生成科赫曲线(或科赫雪花)分形的应用程序。 只需解压缩并运行 Koch_curve_GUI.m 文件。
包括二十多个分形程序,从最简单的科赫曲线到曼代尔波集合.内容参见 分形艺术程序设计>>. (运行程序时,右键点出快捷菜单.先选定图形再作图.看复平面上的分形时, 请将const int STEP=4改为1.) 本程序用CB5编写,在...
如何运用撰写python程序画出科赫雪花曲线,画其他的图案都可以用类似的语句撰写程序。熟悉掌握python画图技巧。
毕业设计MATLAB源码资料
部分与整体以某种形式相似的形,称为分形,科赫曲线是一种外形像雪花的几何曲线,所以又称为雪花曲线,它是分形曲线中的一种,画法如下
NULL 博文链接:https://luliangy.iteye.com/blog/1266548
NULL 博文链接:https://xiaozhouzhou.iteye.com/blog/1893645
用OPENGL实现koch曲线 通过多次迭代进行曲线的绘画
一起分享