学了挺久的分型了,一直没有画科赫曲线,昨天准备画画科赫曲线。
我觉得我把画图想得太简单了。画了挺久的科赫曲线,开始时有些地方一直想不明白,比如说,第一次画完画第二次的时候,第一次画过的线要怎么擦掉。后来发现,我的方向错了。
这个感觉有点像一笔画,先把所有的点找出来,然后最后一次性画完。
我在代码里面判断了直线的斜率,开始我直接用==号判断是否等于cos60和cos120,后来发现这个方法行不通,因为cos的值为double ,而斜率除出来是一个int型的,在强制转换的过程中可能会有点问题。
还有些问题是关于坐标点计算的,可能加减乘除很容易搞错,一不小心三角形就变形了,或者三角形往里凹了。但是这些还是小问题,只要把坐标打印出来,一点一点慢慢检查就好。
再说说我判断斜率时候出现的问题,我在解决了其他所有的问题之后,我开始试循环的次数,开始时挺正常的,后来我试了8,然后他就开始报错了。他报了一个这样的错Exception in thread "AWT-EventQueue-0" java.lang.ArithmeticException 后来我询问了度娘,度娘告诉我这是除数为0时才会报的错,然后我定位到了我写的那行代码,发现是判断斜率的那个地方,后来我想到了一个解决办法,就是先判断y1y2的大小,再判断x1x2的大小,分步进行,而且这样画的三角形也不出错。这也说明一个问题,循环次数多了之后,因为画的点都是int型,所以会重合在一起。对于初始长度为900的来说,循环到8次就差不多了,在循环下去也是在画重合的点。
下面是我写的科赫曲线的代码:
public class kehe extends JFrame{ private static final long serialVersionUID = 1L; public Graphics g; public static void main(String[] args) { kehe kh = new kehe(); kh.line(); } public void line(){ //设置窗体的属性 this.setTitle("科赫曲线"); this.setSize(1000, 700); this.setDefaultCloseOperation(3); this.setLocationRelativeTo(null); //设置窗体可见 this.setVisible(true); Graphics g = this.getGraphics(); this.g =g; } //重写父类的重绘方法 public void paint(Graphics g){ //调用父类的重绘方法 int x1,x2,y1,y2; x1=50; x2=950; y1=y2=500; super.paint(g); draw(x1,y1,x2,y2,11); } public void draw(int x1,int y1,int x2,int y2,int count){ int a1,a2,a3=0,b1,b2,b3=0; //如果计数器大于1,则递归 if(count>1){ count--; //第一个三等份点 a1=(x2-x1)/3+x1; b1=y1+(y2-y1)/3; //第二个三等份点 a2=2*(x2-x1)/3+x1; b2=y1+2*(y2-y1)/3; //第三个突起的点 //如果为一直线 if((y2-y1==0)){ a3=(a1+a2)/2; b3=b1-(int)((a2-a1)*Math.sqrt(3)/2); } //如果与水平夹角120度 if((y2-y1)<0){ if(x2>x1){ a3=x1; b3=b2; }else{ a3=x2; b3=b1; } } //如果与水平夹角60度 if((y2-y1)>0){ if(x2>x1){ a3=x2; b3=b1;} else{ a3=x1; b3=b2; } } if(x2==x1){ a3=a1; b3=b1; } draw(x1, y1, a1, b1,count); draw(a1, b1, a3, b3,count); draw(a3, b3, a2, b2,count); draw(a2, b2, x2, y2,count); } //如果计数器等于1,则画线 else if(count==1) {g.drawLine(x1, y1, x2, y2);System.out.println("x1为:"+x1+" y1:"+y1+" x2:"+x2+" y2:"+y2);return;} } }
还有,关于科赫曲线画雪花, 在科赫曲线的基础上就很简单了。
相关推荐
科赫曲线的绘制
科赫曲线matlab程序代码,仅供了解原理,了解迭代过程。
这是一个用MATLAB语言写的生成科赫曲线的程序,其中科赫曲线是分形理论中的常见图形。
### 科赫曲线MATLAB代码解析 #### 一、引言 科赫曲线是一种典型的分形几何图形,具有自相似的特性。它是由瑞典数学家赫尔曼·冯·科赫于1904年首次提出的。科赫曲线的生成过程是通过不断迭代一个基本的构造单元来...
标题中的“毕业设计MATLAB_科赫曲线.zip”揭示了这是一个关于MATLAB编程的毕业设计项目,主题聚焦在科赫曲线。科赫曲线是一种著名的分形几何图形,它通过迭代过程构建,每次迭代都将直线段替换为更复杂的形状,以此...
NULL 博文链接:https://yangzhenlin.iteye.com/blog/1835776
科赫曲线.py
使用python turtle库完成科赫曲线绘制
科赫曲线绘制.exe
科赫曲线,也被称为科赫雪花,是一种经典的分形几何形状,由德国数学家费迪南德·冯·科赫在1904年提出。它通过一系列迭代过程从简单的直线段逐步演变而来,每一步迭代都将一条直线段替换为四个相同长度的线段,每个...
雪花曲线是科赫曲线的一种变体,它基于科赫曲线的构建原理,但每次迭代时在每个三角形的顶点处添加等边三角形的三分之一边。经过无限迭代,形成的曲线具有无限长度,包围的区域却只有有限的面积,而且其边界具有令人...
python设计科赫曲线分形树
例如,我们可以使用以下代码生成一次迭代的科赫曲线: ``` for g=linspace(0,1,40)*sin(pi/3); y1(3)=g; set(h1,'ydata',y1); drawnow; end ``` 这部分代码将生成一次迭代的科赫曲线。 3. 我们可以继续迭代,以...
如何运用撰写python程序画出科赫雪花曲线,画其他的图案都可以用类似的语句撰写程序。熟悉掌握python画图技巧。
理论上科赫曲线可以无限次叠加,但在实际制作中,因为电路水平的限制,迭代次数过高会导致难以制作出实际的激励装置。因此,本研究中制作的涡流传感器采用了三次迭代的科赫雪花图形。 涡流传感器的工作原理是利用...
利用分形写的科赫雪花,可以进行拖动、拾取的功能,按N、M改变雪花的边数
Koch曲线是由瑞典数学家赫尔格·冯·科赫在1904年提出的,是最具代表性的分形之一。该曲线的构造过程体现了分形的自相似性质,即在不同尺度下,局部形状与整体形状相似。Koch曲线的生成过程始于一条直线段,然后通过...
除了科赫曲线,其他分形图形如正方形也可以通过类似的方式绘制。在给出的`draw2`方法中,以一个正方形为基础,每次迭代将其划分为九个小正方形,然后只保留中心和四个角落的小正方形,其余的替换为小正方形。通过...