? ? ? ? 这几天在因为在和别人合作写一个程序,就在想比如我要写一个科赫曲线,那么我写来给别人用的话,怎样是用着最方便的,即使是别人没有去详细看你的代码,拿到手就像写一个界面那样,直接 new 一个对象,然后调用函数就 ok 啦!然后我就想到啦封装,就是我直接写一个科赫曲线的类,有不同的构造器方法,也就是提供给别人不同的选择,比如想自定义偏转角,步长,起始点,递归次数 等等。

? ? ? ? 然后,这个我是用L-system 规则写的科赫曲线,而L-system就是自定义规则,然后生成最终用来画线的字符串,比如字符 'F'代表在画布上画一条长度为一定的直线,"-"和"+"则代表偏转的角度,比如:

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?F的规则: ? ?F -> F-F++F-F

?

? ? ? ? ? ? ? ? ? ? ? ? ? ? ?递归: ?F-F++F-F-F-F++F-F++F-F++F-F-F-F++F-F

实现的效果:

?

?

代码:

class="java" name="code">public class KeheLine {

private String goal;

private int angle=0;

private int leftangle=60;

private int rightangle=60;

private int length=300;

private int depth=1;

private double x1=200,y1=500;

private double pi=Math.PI;

/**

* 无参数构造

*/

public KeheLine(){

String son="F-F++F-F";

this.goal=getString(son, 1);

}

/**

* 自定义规则构造器

* @param son

*/

public KeheLine(String son){

this.goal=getString(son, 1);

}

/**

* 自定义规则和递归层次的构造器

* @param son 定义的规制字符串

* @param depth 深度

*/

public KeheLine(String son,int depth){

this.goal=getString(son, depth);

this.depth=depth;

}

/**

* 自定义规则和递归层次和旋转角的科赫曲线的构造器

* @param son 定义的规制字符串

* @param depth 深度

* @param angle 旋转角

*/

public KeheLine(String son,int depth,int angle){

this.goal=getString(son, depth);

this.angle=angle;

this.depth=depth;

}

/**

* 自定义规则和递归层次和旋转角和左右偏转角相等的科赫曲线的构造器

* @param son 定义的规制字符串

* @param depth 深度

* @param angle 旋转角

* @param leftangle 偏转角

*/

public KeheLine(String son,int depth,int angle ,int leftangle){

this.goal=getString(son, depth);

this.angle=angle;

this.leftangle=leftangle;

this.rightangle=leftangle;

this.depth=depth;

}

/**

* 自定义规则和递归层次和旋转角和左右偏转角不相等的科赫曲线的构造器

* @param son 定义的规制字符串

* @param depth 深度

* @param angle 旋转角

* @param leftangle 左偏转角

* @param rightangle 右偏转角

*/

public KeheLine(String son,int depth,int angle ,int leftangle,int rightangle){

this.goal=getString(son, depth);

this.angle=angle;

this.leftangle=leftangle;

this.rightangle=rightangle;

this.depth=depth;

}

/**

* 自定义规则和递归层次和旋转角和左右偏转角不相等的科赫曲线的构造器

* @param son 定义的规制字符串

* @param depth 深度

* @param angle 旋转角

* @param leftangle 左偏转角

* @param rightangle 右偏转角

*/

public KeheLine(String son,int depth,int angle ,int leftangle,int rightangle,int length ){

this.goal=getString(son, depth);

this.angle=angle;

this.leftangle=leftangle;

this.rightangle=rightangle;

this.length=length;

this.depth=depth;

}

/**

* 得到科赫曲线的字符串

* @param son 定义的规制字符串

*/

public String getString(String son,int depth){

String relust="F";

for(int i=0;i

StringBuffer str=new StringBuffer();

for(int j=0;j

if(relust.charAt(j)=='F'){

str.append(son);

}else{

str.append(relust.charAt(j));

}

}

relust=str.toString();

}

return relust;

}

/**

* 画科赫曲线

* @param g 画布对象

*/

public void drawKehe(Graphics g){

System.out.println("depth=:"+depth);

double rangle=angle;

double rlength=length/(4*depth);

for(int i=0;i

if(goal.charAt(i)=='F'){

double x2=x1+rlength*Math.cos(rangle*pi/180);

double y2=y1-rlength*Math.sin(rangle*pi/180);

g.setColor(Color.green);

g.drawLine((int)x1,(int) y1, (int)x2, (int)y2);

x1=x2;

y1=y2;

}else if(goal.charAt(i)=='-'){

rangle+=leftangle;

}else if(goal.charAt(i)=='+'){

rangle-=rightangle;

}else if(goal.charAt(i)=='*'){

rangle+=angle;

}

}

}

}

?

大小: 3.2 KB

查看图片附件

java编写科赫曲线_分形——科赫曲线相关推荐

  1. java编写计算类加减乘除_老师要求张浩使用面向对象的思想编写一个计算器类(Calculator),可以实现两个整数的加减乘除的运算.java...

    导航:网站首页 > 老师要求张浩使用面向对象的思想编写一个计算器类(Calculator),可以实现两个整数的加减乘除的运算.java 时间:2019-4-10 老师要求张浩使用面向对象的思想编 ...

  2. java编写代码用什么_如何学习用Java编写代码:为什么要学习以及从哪里开始

    java编写代码用什么 by John Selawsky 约翰·塞劳斯基(John Selawsky) 如何学习用Java编写代码:为什么要学习以及从哪里开始 (How to learn to cod ...

  3. java编写排序的代码_在Java 8之前,您编写了几行代码来对对象集合进行排序?...

    java编写排序的代码 在Java 8之前,您编写了几行代码来对对象集合进行排序? Java 8您需要多少个? 您可以在Java 8中用一行完成. 让我们看看下面的Employee类. public ...

  4. java编写大数据分析模型_如何用Java(DOM分析器)编写XML文件

    java编写大数据分析模型 Earlier we learned how to read XML file and how to edit XML file in java using DOM Par ...

  5. python绘制缓和曲线_步进电机频率缓和曲线

    我正在写一些控制五相步进电机的软件.步进电机的速度由我发送到电机控制器的脉冲频率控制.我目前面临的挑战是,我想在运动中放松和放松.我实际上是在复制一些我没有源代码的旧软件的行为.我对放松的逻辑有一个理 ...

  6. 光滑曲线_微分几何笔记(2) —— 曲线的参数化

    第二周讲完了Klingenberg的第一章Curves,做一点微小的笔记. 分成三个部分,本篇讲曲线的弧长参数:下一篇讲一般的Frenet标架及方程组:再下一篇讲二维三维空间曲线的curvature ...

  7. java 编写命令行工具_编写命令行工具

    1.使用common-cli编写命令行工具 commons-cli是Apache开源组织提供的用于解析命令行参数的包. 先引用common-cli依赖包: commons-cli commons-cl ...

  8. 用java编写一个图书管理系统_手把手教你编写第一个java程序

    安装完jdk后我们就可以试着编写第一个java程序了,让我们一起来试试吧! 第一步 点击开始--所有程序--附件--记事本,新建记事本,输入以下代码: class HelloWorld { publi ...

  9. 用java编写的爱情红心_如何用java实现每天给对象发情话

    一.引言 最近看到一篇用js代码实现表白的文章,深有感触. 然后发现自己也可以用java代码实现,然后就开始写代码了,发现还挺有意思的,话不多说开搞 实现思路: 使用HttpClient远程获取彩虹屁 ...

最新文章

  1. 推荐算法工程师的成长之道
  2. 怎样在谷歌浏览器上加载金山词霸的取词插件?
  3. 【Python】JupyterLab 出 Windows 桌面版了!
  4. 已经围上为何不算目_在湖人打球顺风顺水,戴维斯为何还要亏本卖掉洛杉矶豪宅?...
  5. struts2 jsp跳转action 404_Struts2 学习笔记(三)
  6. 小货车DataAdapter对象 1129
  7. Ubuntu在启动器中添加自定义程序快捷方式
  8. tiptop 编译运行_putty终于让我的TIPTOP脱离虚拟机在64位上运行了。
  9. ASP.NET MVC 使用 Log4net 记录日志
  10. [转载] JavaParser 无法解析链式调用的问题
  11. 如何在 Mac 上关闭睡眠模式?
  12. Google的Guava开发库快速快速入门
  13. python对比excel重复数据_Python-查找excel文档中的重复数据
  14. 今天,想和姐妹们聊聊技术与成长|大厂程序媛的升级打怪之路
  15. 海康摄像头opencv实时回调
  16. python数据分析岗位_python拉勾数据职位分析
  17. Win10更新后使用相机时,提示找不到相机解决方法(方法之一)
  18. 前端代码规范文档(Vue、es6、ts、部分js)
  19. 我的世界是一款自由度非常高的游戏,你玩过吗?
  20. [附源码]java毕业设计宠物店管理系统

热门文章

  1. 【已解决】Linux下安装JDK
  2. Javaweb基础——Servlet
  3. 彻底关掉win10自动更新_win10系统explorer.exe错误的解决教程
  4. 基于stm32、spi协议的Fatfs文件系统移植(附完整代码下载)
  5. linux gt txt内容为空,2gt;/dev/null和gt;/dev/null 2gt;amp;1和2gt;amp;1gt;/dev/null的区别...
  6. sts4创建spring项目_使用STS4新建springboot项目
  7. Cortex-M3 任务切换函数实例
  8. 启明云端分享|ESP32-C3(ESP32­C3­MINI­1)使用的RISC与CISC有什么区别
  9. linux可以生成pdb调试信息吗,Linux通过使用pdb简单调试python计划
  10. java 抽象工厂工厂_java之抽象工厂