不知不觉到了毕业季,回顾10多年前在海外的大学生活,感觉即特别又辛酸。这几天翻了一下大学期间完成的一个非常有意思的模拟植物生长的小软件,进行分享,给即将步入大学的众多IT行业的学子加油。
一. L-系统原理介绍
L-系统是匈牙利生物学家Aristid LinderMayer于1968年提出的。L-系统的本质是一个重写系统,通过对植物对象生长过程的经验式概括和抽象,初始状态与描述规则,进行有限次迭代,生成字符发展序列以表现植物的拓扑结构,并对产生的字符串进行几何解释,就能生成非常复杂的分形图形。
具体例子如下:雪花曲线
v:{F,+, - }
w:F
p:F->F-F++F-F
几何解释是:
F:向前画一条线
+:右转67.5度(++即为右转135度)
-:左转45度
具体信息见下图,当迭代次数n=3时就可以得出很好的雪花形状。
二. 案例结果展示
本案例是在2005年圣诞节期间开发,采用Java开发语言,底层代码完全自己编写,未引用任何第三方包。
先展示一下系统的结果:
案例一:
规则:
![]() |
如左图所示,
|
结果展示:
一次迭代 |
三次迭代 |
十次迭代 |
|
|
|
案例二
规则:
结果展示:
一次迭代 |
三次迭代 |
六次迭代 |
|
|
|
案例三
规则:
结果展示如下:
一次迭代 | 三次迭代 | 七次迭代 |
![]() |
![]() |
![]() |
案例四
规则:
结果展示如下:
一次迭代 |
三次迭代 |
四次迭代 |
|
|
|
案例五
规则:
结果展示如下:
一次迭代 |
三次迭代 |
五次迭代 |
|
|
|
案例6
规则:
结果展示如下:
一次迭代 |
三次迭代 |
七次迭代 |
|
|
|
三. 系统界面
这里把系统界面再介绍一下,截屏如下:
界面左侧是绘图区域.
右侧在上一章节的规则部分有截图,除去已经截图的,其他部分说明如下:
- Map Value – 选择初始公式以及规则
- Times – 迭代次数
- Color – 选择绘制的图案颜色
四. 原始代码:
一共五个类文件:
- Gui.java – 主界面
- DrawPanel.java – 图案绘制
- LRules.java – 定义公式以及规则
- Point.java – 点对象
- Start.java – 启动类
下面贴出LRules.java, DrawPanel.java, 以及Point.java的原始代码,感兴趣的可以拿来使用,并且自己定义自己喜欢的风格的界面,进一步的扩充里面的规则案例.
LRules.java
import java.awt.Color; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.geom.Line2D; import java.util.Stack;
publicclass LRules {
public String combineLine(intiteration, String axioms, String rule1, String rule2) { String products=""; String product = axioms; for (intn = 0; n < iteration; n++) { products=""; for (inti = 0; i < product.length(); i++) { charcurrent = product.charAt(i); charcheck1 = rule1.charAt(0); charcheck2 = rule2.charAt(0); if (current == check1) { products = products.concat( |