基于L-System、遗传算法、人工生命进化模型的人工生命的计算机动画策略

来源:互联网 发布:苹果电脑mac软件大全 编辑:程序博客网 时间:2024/05/25 23:56

基于L-System、遗传算法、人工生命进化模型的人工生命的计算机动画策略

广州市真光中学肖毅 华南理工大学张嘉华、梁成

【摘 要】 随着计算机图形学的飞速发展,人们一直研究在计算机上模拟各种植物形态的可能性。目前,人们基本上利用Navier-Stokes方程来模拟植物的形态,而其模拟出来的植物由于形态单一、逼真度不够高,已经不能满足农业、工业、军事、3D等方面的要求。通过对上述的情况进行研究和分析之后,我们寻找出一种能够逼真地模拟出植物的方法即BSP的优化—L-System。在BSPL-System的基础上,我们做了大量的实验,以验证这一方法的可行性、有效性。

【关键词】 L- System  BSP   龟形  迭代   递归   字符串替换    

AbstractWith the rapid development of the Computer Graphics ,many experts have been working on the possibility of the Simulation of various arborescences. Currently ,people are simulating arborescence by using the stochastic Navier-Strokes equation, however, due to the monotony and less fidelity of the arborescence .these arborescences can’t meet the needs of the development in agriculture ,industry and military affairs. After researching and analysing the circumstances,we have found out a way that can realistically simulate the plants,which called the optimize of BSP-L-System.On the basis of BSP and L-System,we have done a great deal of experiments so as to prove the feasibility and validity of this method.

Key wordsL-System BSPturtleiterativerecursionstring replacing
Simulation of Plants

 

 

 

 

 

 

 

 

一 、研究现状

 

近年来,自然景物的模拟一直是计算机图形学中最具挑战性的问题之一。作为自然景物模拟的重要内容,对树木、流水、波浪的模拟正日益引起人们的关注。植物是自然界最常见的景物,其种类繁多,形状各异,长势千姿百态,以及它们结构的不规则性和自相似性,给研究者提出很多难题。

现有的模拟植物方法一般是利用Navier-Stokes方程去构造模拟植物函数,从而模拟植物的形态和生长过程。Navier-Stokes方程具有随机性,而植物的生长不仅具有随机性,还具有自相似性(即植物的某一子树被放大后仍然与整棵植物相似)。如果仅仅利用Navier-Stokes方程模拟植物,无论是植物的形态、逼真度等方面都存在一定的缺陷。

由于利用Navier-Stokes方程模拟出来的自然景物形态单一、逼真度不够高,已不能满足人们在军事、农业、工业、3D等方面的要求。为了克服Navier-Stokes方程模拟植物的缺点,我们寻找出一种新的、能更逼真地模拟植物形态和生长过程的方法---BSP的优化—L-System

 

二、BSP在树木模拟中的应用

 

(一)BSP概述

BSPBinary Space Partition是一种空间剖分技术,由Fuchs1980年首先提出并应用于平面对空间的剖分,从而建立起空间二叉树结构。它基于这样一种事实,即空间中的任何平面都将整个空间分割成两个半空间,所有位于该平面某一侧的定义了一个半空间,位于另一侧的点定义了另一个半空间,根据这种对空间剖分的方法,就可以建立起整个虚拟场景的描述以及场景中各种对象的描述。

2-1-1是一棵BSP树。分开的平面用黑色表示,对象用实心图形表示。

让我们选择一个平面(p1)将空间分割成两个半空间(p2p5),所有位于该平面一侧的点定义一个半空间(p2),位于另一侧的点定义另一个半空间(p5);选择任何半空间中的一个平面,它会进一步将此半空间分割成两个更小的子空间……如果我们将这一过程进行下去,子空间将会越来越小,直到不可分割为止。二叉树中,分割多边形被存储为树的结点,所有位于子空间中的多边形都在相应的子树上;对每一子树,分割多边形将空间分成两个子空间;这两个子空间分别作为该子树的特点;对于与分割多边形相交的平面将被切开为两个多边形,并分别归入相应的子空间;这样递归直到处理完所有的多边形为止,最终就得到物体的对象和二叉树的结构。

2-1-1

2-1-2

 

 

 

 

 

 

 

 

 

 

 

 


(二)BSP模拟植物算法

 

BSP的“空间剖分”技术,即对空间进行剖分并建立起空间二叉树结构,尽管这种建立的过程是基于递归,但由于它在将空间分割成两部分之后,对每一部分中的对象都进行了细致的描述,更多地关注对象的结构和行为,因而在树木模拟中,就能够发挥它的“空间剖分”优势,进而能够更逼真地模拟出植物的形态结构特征。

BSP模拟树木形态,影响树木模拟效果的参数有:

        1)递归的深度(iter

树木的枝干随着iter的递减而逐渐变细。

2)偏转角(angle

分枝的偏转角有一定的随机幅度。偏转角过大或过小则剪枝。当iter较大,即处于较为底层的状态时,可使分枝的偏转角的随机幅度减小,使树木看起来长势更为集中。

3)步长(step

我们可以通过步长控制叶子的长度。

4)根结点的坐标

根结点的坐标用于确定植物的位置。

在实际的模拟过程中,除了要考虑上述参量外,还需要考虑树木的生物属性,如当树枝的偏转角度过大时,给予“剪枝”,以及控制叶子的长度。

    BSP是迭代和递归中最基本的算法之一。简单描述如下:

Sub recursion (iter)

If 递归的深度等于0 

Then

     Exit Sub

Else

 

'画树干

左转

recursioniter-1'画左子树

右转

recursioniter-1'画右子树

End if

 

            End Sub

 

其中画子树的过程即递归的过程。iter表示递归的深度(iter递减到0)

iter=0              iter=1        iter=2         iter=3        iter=4

 

 

 

 

 

 


2-2-1

 

 

如果我们将二叉树进行一些修改,就能生成简单的二维树:

首先,生成的枝干更加复杂(如图 2-2-2)。其中侧枝较多的分枝出现在树干的左边还是右边是随机决定的。

其次,分枝的偏转角得有一定的随机幅度;当iter较大,即处于较为底层的状态时,分枝的偏转角的随机幅度也应较小,使树木看起来长势集中些。

再次,应考虑树木生长时的顶端优势。当分枝与最初主干之间的夹角较小时,可以在这个分枝上画两个子树,使分枝看起来更长。

最后,考虑树干的粗细及叶子。随着iter的递减,树干逐渐变细;当iter小于1时,画叶子。在末端画上叶子,还可以有其他效果。

 

 

 

 

 

 

 

 

 


2-2-2

BSP具有遍历速度快的优点,BSP树的遍历思想是根据点和分割平面的位置关系来实现的,在引擎的设计中,充分考虑了二叉树的多种特点。特别是用来描绘场景中的静态物体取得良好的效果。

经过对比,我们发现将BSP进行修改后生成的简单二维树(如图2-4)与用原始方法生成的树(如图2-3)相比,形态更丰富,逼真度更高。

 

三、L-System在植物模拟中的应用

 

(一)L-System的数学模型及其构型的基本方法

几个世纪以来,自然界中多彩多姿的植物深深地吸引了许多数学家,他们对其显著的几何特性作了广泛的研究,例如,叶子的左右对称,花的旋转对称,松果上鳞片的螺旋排列等。1968年,美国的生物学家Aristid Lindermayer(19251989)提出了Lindenmayer系统,简称L-System。它是描述植物生长的数学模型,其基本思想可解释为理想化的树木生长过程:从一条树枝(种子)开始,发出新的芽枝,而发过芽枝的枝干又都发新芽枝……最后长出叶子。这一生长规律体现为斐波那契数列:11235813213455,…

记该序列的第n项为Fn,则有递推关系式:

Fn+2Fn+1Fn (n=1,2,3,…)

根据L-System的基本思想,我们先建立二维树的数学模型:从树干开始,然后沿着树干逐渐扩展到连接的树枝,再以递归的方式进行同样的过程,该过程持续到最终分枝。为简明起见,在这一模型中,每一树枝都化为一条直线,每次循环,树枝都被缩放,旋转和平移到其父枝的新位置上(如图3-1-1)。

3-1-1

L-System做为数学理论框架,研究植物的进化和造型,SmithAnonoKunii率先将L-System引入到计算机图形学中,显示了L-System在计算机模拟植物方面的潜力,为计算机模拟植物的真实感图形提供了强有力的工具。

(二)字符串替换(string replacing)

L-System的核心思想是“字符串替换”。字符串即按一定规律的排布的字符集合。它可以包含短语、字母、数字或标点符号,一般用大写字母书写。字符串替换可以定义为根据一组改写规则或产生式(production)依次替换一个简单初始物的每一部分,即给出初始物(一条字符串)然后根据产生式规定的替换规则去替换初始符串中的每一个字符。这种替换的次数是无穷的,可得到无限推导序列。替换中每一次反复称之为字符串深度,例如深度为3就表明字符串替换进行了3次。以下是一个例子:

初始符ωAB

产生式P1A→ABP2B→A

 

深度

生成物

解释

0

AB

深度为0,替换结果即初始符

1

ABA

根据产生式,将初始符中的AAB替换,BA替换。以下反复依次类推。

2

ABAAB

 

3

ABAABABA

 

N

……

 

 

假如我们观察一下真实植物的生长,就可以发现它们从种子开始(L-System中称之为初始物),每一个细胞都根据由DNA决定的生长法则不断地繁殖自身,每一根枝条也会抽出与自身几乎一样的新枝,最终生成一棵完整的植物。以上观点说明如下:

n=1时植物在n=0的基础上抽出两条新枝,则原本的枝干变成旧枝,而且再也不会抽出另外的新枝。从中可以看出二叉树按两条规律生长:1、每个反复中,新枝将会抽出另外三条新枝,而且自己变旧。2、枝条会继续生长,但旧枝不再抽新枝。假如我们用字符F来代替新枝,G代替旧枝,那么从初始物F开始,每次用G代替F,并加上FF,继续反复并转换成图象,就能简单地用字符串替换算法生成植物。正是字符串替换的思想,为植物的模拟提供一个简单快捷,而又强有力的武器。

 

(三)龟形(turtle)

字符串替换的概念可以看出,L-System中的初始物和产生式均是由字符串来描述的.归根结底是因为L-System是一种形式语言。若要将L-System植物模拟联系起来,使之能表现真实植物枝条的构造,就需给L-System中每一个字母赋予一个特定的几何图形含义。为了形象地说明,可以引进龟形这个概念。

最初的龟形来自于一个称为LOGO的内置了制图字符指令集的绘图软件。龟形的本质也就是一个运动指针。

龟形的主要思想是:将龟形状态定义成一个三元素集合(xyα),其中坐标(xy)表示龟形的位置,方向角α表示龟形的方向,给出步长d和角增量δ龟形行为对应于下列命令:

命令

作用

结果

F(d)

向前移动一步,步长为d

龟形状态变为(x′y′α),其中x′=x+dcosαy′=y+dsinα,在点(xy)(x′y′)间画一直线段

+(δ)

逆时针转δ

龟形的下一状态为(xyα+δ)

-(δ)

顺时针转δ

龟形的下一状态为(xyα+δ)

龟形的当前状态压入堆栈

将信息(包括龟形的位置和方向,可能还有其它属性,如所画线段的颜色及宽度)存入堆栈

从堆栈中弹出一个状态作为当前状态

不画线,但龟形的状态通常是改变的

给定一个字符串ω龟形的初始状态(x0y0α)以及                            固定参数dδ龟形就可以产生相应的图形(如图3-3-1)。

3-3-1

 

A

A

    给予龟形一条命令:FF[+F][-F]龟形即做以下操作                             ——首先向正方向移动|2d|个单位,到达A点,然后把当前位置存入栈中,再逆时针旋转|δ|,并移动|d|个单位,出栈(回到A点)再入栈,最后顺时针旋转|δ|,并移动|d|个单位,出栈再回到A点,就能得到一棵具有一定形态的子树。

上述为二维图例,若要绘制三维树形结构,需要将二维龟形命令扩展到三维空间上.首先给出描述龟形当前方向的三个向量 ,它们分别表示龟形的向前、向左和向上的方向,均是单位长度,且满足方程旋转龟形表示如下 .=[ R,其中R3×3旋转矩阵.关于向量旋转α的矩阵表示如下:

用下列带参数的符号控制龟形的空间方向:

+(δ):用旋转矩阵RU(δ)表示向左转δ角;

-(δ):用旋转矩阵RU(-δ)表示向右转δ角;

&(δ):用旋转矩阵RL(δ)表示向下转δ角;

(δ):用旋转矩阵RL(-δ)表示向上转δ角;

(δ):用旋转矩阵RH(δ)表示左滚动δ角;

/(δ):用旋转矩阵RH(-δ)表示右滚动δ角.

例如一个L-System描述如下:

r1=0.9        /*树主枝的缩短比例*/

r2=0.9       /*树分枝的缩短比例*/

α0=45°    /*旁枝与主枝间的夹角*/

α2=45°    /*旁枝上各分枝间的夹角*/

d=137.5°  /*旁枝与旁枝间的夹角*/

  ωr=0.707    /*树枝宽度的比例*/

  ωA(110)

  P1A(l,w)! (w)F(l)&(a0)B(l×r2,w×wr)/(d)A(l×r2,w×wr);

  P2B(l,w)! (w)F(l)-(a2)$C(l×r2,w×wr)C(l×r1,w×wr);

  P3C(l,w)! (w)F(l)+(a2)$B(l×r2,w×wr)B(l×r1,w×wr);

其中(w)设置线宽为w,子枝与母枝之间宽度比为wr=0.707;符号$是沿自身轴旋转龟形,使指向龟形左边的向量 转到水平位置,按下列公式修改龟形在空间的方向:

其中 是重力的相反方向,| |表示向量 的长度,在确定分支平面时,以母枝方向作为子枝的向前方向 叉乘得到子枝的向左方向,然后在 确定的平面上,用二分法找到与 夹角为a2a2的向量,这就是子枝的方向。

(四)L-System树木生成的实现

字符串替换”是L-System的核心思想。它通过产生一系列字符串来描述分形树木图形特征。我们以一种灌木的L-System为例:

该类灌木的L-System的原表达式为:L=〈GWP

其中G是字符集,这里G={F,+,-,[,]};W是起始符号元,用以确定字符串的初始状态,且W∈G,是G上所有非空的单词集。此处W=“F”;P为该类植物的生成规则(即替换法则)集,是所谓产生式的有限集合,产生式写作a→x,字母a和单词x分别称作产生式的前驱和后继。规定对任何字母a∈V,至少存在一个非空单词x,使得a→x。若对给定的前驱a∈V无明确解释的产生式,则规定a→a这个特殊的产生式属于P。对每个a∈V,当且仅当恰有一个非空单词x,使a→x.依据原理,按照一定的重写规则,并加以参数控制,即可模拟植物的各种形态及其生长过程。此处

P={F→FF+[+F-F-F]-[-F+F+F]++- --[[]]

”F”为种子,经过多次迭代,可以生成描述一颗树的字符串:

深度

L-System产生的字符串

0

F

1

FF+[+ F-F-F]-[-F+F+F]

2

FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]+[+FF+[+F-F-F]-[-F+F+

F]-FF+[+F-F-F]-[-F+F+F]-FF+[+F-F-F]-[-F+F+F]]-[-FF+[+F-F-F]-[-F

+F+F]+FF+[+F-F-F]-[-F+F+F]+FF+[+F-F-F]-[-F+F+F]]

以深度2转深度3为例,根据替换法则P                                      在深度2F”FF+[+F-F-F]-[-F+F+F] ”代替,FF则变成”FF+[+F-F-F]-[-F+F+F] FF+[+F-F-F]-[-F+F+F]”,依此类推,便可得到如上表深度为3L-System算法产生的字

3-4-1

符串(如图3-4-1)。

其算法简单描述如下:

1.生成字符串

Sub LSystem_string

Const re As string  ‘3种不同的替换方案

String=”F”  生成的字符串,以”F”为种子

For i=1 to depth

       string中的”F”替换成re

EndFor

End sub

2.绘制图形

Sub LSystem_draw (depth)

    每次读取字符串中的一个字符给ch

    While (ch<>“)“)

       Select ch

           Case “F” 画线段

                     Case “+“ 顺时针旋转

Case “-“ 逆时针旋转

Case “[“ 记录当前状态压栈;Lsystem (depth-1)

       EndSelect

    Endwhile

Endsub

 

可是这样生成的树效果并不理想,因为它的树枝和树叶没有区别(也可以说只有树枝没有树叶),生成的树也千篇一律。其它论文中一般的解决办法是:为每次迭代生成字符赋上不同的参数,但那样要耗去大量的时间和空间,不符合要求。为此,我们对以上的算法做了一些小修改:

首先,在字符串“FF+[+F-F-F]-[-F+F+F]”中,我们把前两个“F”看成树干,用“G”表示,字符串就成了“GG+[+F-F-F]-[-F+F+F]”,“F”和“G”的替换相同。在接下来画树的过程中,把“F”画成树叶,把“G”画成树干,并且让树干随iter的递减而变细。在样式方面,我们准备了三种替换方案,在字符串替换时随机选择方案。

3

这样,生成的树就生动多了。

有了字符串替换成树木的思想后,我们还可以写出不同形态的树木的生成规则。面我们给出一些例子,以供参考:

图形编号

初始物

深度

生成规则

3-4-2

GFX[+++++GFG][————GFG]

X-FXF

3-4-3

 

F

 

6

FF[+++++++++++++++F]-F[———————————F]F

3-4-4

 

X

 

10

XF[+X]F[X]+X

F FF

3-4-5

X

10

XF[+X][X]FX

FFF

3-4-6

 

Y

 

 

10

 

XX[-FFF][+FFF]FX

FYFX[+Y][Y]

3-4-7

F

5

FF[+FF][FF]F F[+FF]

 

 

 

3-4-2

3-4-3

3-4-4

3-4-5

3-4-6

3-4-7

 

(五)BSPL-System的优化

仔细研究,不难发现:L-System算法实际上就是BSP的推广,那么也可以把两种算法的思想合在一起并加以改进,以求生成逼真度高且较复杂的树.

电子计算机是一个基于二进制的处理机器,相对于处理图形而言,处理字符串的资源消耗明显小得多。用字符串代替图形,能提高生成效率。这也是促使我们研究并采用L-System的根本原因。而且,除上文所说,将字符串“FF+[+F-F-F]-[-F+F+F]”改进成“GG+[+F-F-F]-[-F+F+F]”,相对应“G”与“F”采用不同的颜色,并让树干随iter的递减而变细外,我们还自编了另两条不同的字符串,依供随机调用。

但仅用L-System的弊病也是显而易见的,最重要的是形式语言较为抽象,难进行细节控制。这点我们在代码编写与实验深有体会。而BSP能对树木每一部分中的对象都进行了细致的描述,更多地关注对象的结构和行为,发挥它空间剖分技术的独有优势。正因为如此,所以我们将BSP加以优化,最主要的是加入了L-System字符串替换算法。

3-5-1

一棵树的生成,不能仅仅依靠一条或几条规律的                                迭代套用,否则每一部份完全相同,就失去了真实性。研究分形的目的,也不仅是为了单调地生成图象,而是从无限分割这一基本方法中,洞察事物的规律,从而逼真地生成自然景物。为了提高生成图形的逼真度,我们从真实 树木生长的条件(如阳光,水分等)和由不同条件造成的形态差别的角度去考察,在代码中加入一系列的判断和执行语句,实现形态的改变。比如说,在图3-5-1中,红色的枝条生长方向过于向下,这在真实的树木中是肯定不可能出现,这时就需要将红色的枝条剪去。我们在代码中将实现这一动作的整个过程叫“剪枝”。剪枝的方法还可以用于其他方面实现,像树木的顶端优势(即植株的顶芽在生长上占有优势,顶芽的存在控制侧芽的生长)。但顶端优势从顶芽开始,沿茎下行而逐渐减小,终至全部消失,所以我们还需加入对层数的判断,在层数较大时才进行顶端优势的控制。另外,分枝异常(即左右不对称),枝叶生长异常在植物生长中非常普遍。对于这一特点,我们可以选用随机产生不同的参数的方法实现,用式子表达如下(枝叶的长度是Step,转角是Anglea是一个范围在0.81中的随机参数):

Step=a*250

Angle=a*30

这样生成的图形形态就更为生动。最后,在画上层树枝时还可以随机减少递归层,图形看起来会更起伏有致。经过这番优化,程序已经比较完善了。

其思想简单描述如下:

第一个过程用于生成字符串。输入一个数值作为深度值。选择str=”F”做为初始物(即种子),规定re11,re21,re31三种不同的替换方案。每次根据随机决定替换方案对初始物做多少次字符串替换,深度是多少,就替换多少次。再把深度、最终生成的字符串sth与初始角传给下一个过程。

第二个过程用于作图。首先逐个读入sth中的字符,当字符为F时画树叶,其颜色为绿色,但色深随机,而且有两种不同长度的树叶供选择;当字符为G时画树枝,树干随着iter的递减逐渐变细,其颜色为褐色,但色深也随机,并注意:1、当角度过大或过小时剪枝,以保持顶端优势 2、在深度较大(一般大于5)时可以左子树与右子树这间多添加几个子树,即在多套用一次本过程 3、当i较小即正在画上层较小的树时,随机少递归一层,可以通过深度减2来实现;当字符为+-'顺时针或逆时针旋转,默认角度为30度,转角为0.81之间的随机参数乘以默认角度:当字符为[ ]时压栈或出栈。读完字符后,退出过程。

 

 

 

四、仿真实验

 

实验内容:基于BSPL-System的植物模拟对比实验

实验目的:通过四组实验,分别采用不同的算法模拟植物,对比它们在模拟植物形态结构、逼真度、相似性等方面的差异,从而证明基于BSPL-System算法的系统在模拟植物方面表现更为突出。

实验条件:以下的五组实验都是奔腾4 1.7G处理器,256M DDR内存,和使用64MM DDR显存和ATI RADEON 9000 PROGPU64位显存带宽的显卡,默认核心频率 275MHz AGP 8X标准。在Windows XP系统下进行实验。

实验步骤:⑴ 运行模拟植物应用程序

⑵ 输入用于植物模拟的参量(参量因实验的不同而不同,具体可参照以下实验)

⑶ 运行程序进行植物模拟

⑷ 观察、分析、植物模拟的过程

⑸ 采用截图软件HyperSnap-DX Pro将植物的形态截取并保存起来

⑹ 将实验数据(植物模拟参量)记录下来

⑺ 重复步骤⑶至⑹十次

⑻ 四组实验完成后,进行实验数据处理和实验结果讨论,并填写实验报告。

实验数据处理:

1、  随机数产生的处理。利用Vs.Net命名空间下的Random类产生随机数,因为Random随机发生器是根据线性同余法产生随机数,并满足单位概率圆,所以在每个实验的同一深度下所做的十次实验,能够保证生成所用的时间是服从正态分布并均匀分布。

2、 实验数据图表处理.。在生成方法相同的情况下,按递归深度进行分类比较,利用实验得出的数据,求出每一个实验生成时间的标准差,平均每种深度取标准差最小的两个实验数据(包括递归深度和生成时间),在Excel中输入数据,绘图,然后根据曲线分析图表,得出相关结论。

实验一、BSP不同深度下的对比实验                                                                             

 

   实验

      项目

实验序号

递归深度

步长

(像素)

生成经过的时间(毫微秒)

生成的结点数

图形编号

1

3

250

156250

31

5-1-1

2

4

250

312500

147

5-1-2

3

5

250

1875000

777

5-1-3

4

6

250

7812500

3296

5-1-4

5

7

250

30468750

14065

5-1-5

6

8

250

102656250

57404

5-1-6

注:1毫微秒=10-7

 

 

 

 

 

 

 

 

 

 

 

 


5-1-1                     5-1-2                      5-1-3

 

 

 

 

 

 

 

 

 


5-1-4                     5-1-5                       5-1-6

 

实验一数据图表:

 

实验一结果讨论:

通过实验一,我们可以观察到:在步长不变(为250像素)的情况下,生成树木的结点数随着递归深度的增加而增加,即与递归深度成正比。当递归深度小于5时,生成树木的分枝较少,叶子稀疏,与自然树木相差甚远;当递归深度大于5时生成树木的枝条过于繁密,甚至掩盖了树叶使图形失真;当递归深度等于5时,生成的树木分枝和叶子稀疏得当,与自然树木相似。因此我们可以得出在BSP不同深度下的对比实验中,递归深度取5时,生成树木的效果最佳(即5为此实验中递归深度的最佳值)。此外,我们还发现树木生成经过的时间从递归深度取4起出现一连串波动,这是因为我们对BSP做了一些修改,如考虑到剪枝、树木的顶端优势等,因此占用了一定的系统资源。

 

实验二、L-System相同法则不同深度下的对比实验

 

   实验                                                                                                         项目

实验序号

递归深度

步长

(像素)

生成经过的时间(毫微秒)

生成的结点数

图形编号

1

4

250

100242

19

5-2-1

2

5

250

200288

125

5-2-2

3

6

250

1802592

1109

5-2-3

4

7

250

16724048

8381

5-2-4

 

 

 

 

 

 

 

 

5-2-1                               5-2-2

 

 

 

 

 

 

 

 

 


5-2-3                                5-2-4

 

 

 

 

 

 

 

实验二数据图表:

 

实验二结果讨论:

通过实验二,我们可以观察到:在步长不变(为250像素)的情况下,生成树木的结点数随着递归深度的增加而增加,这种增加是大幅度的,而且约为前一深度的8倍。生成树木的形态随着递归深度的增加而更富有变化性,与自然树木更为相似。而且层数增多并没有使图形失真。提高递归深度就能有效地增加L-System逼真度。生成经过的时间在深度为35之间出现了波动,可见生成经过的时间并不随树木深度的增加而增加。这是因为我们在代码中应用到了字符串随机选择,它所用到的Random.next方法生成符合正态分布的随机数,需要执行一系列的计算、拟合、剔除过程;针对不同字符的处理也需要一定的内存资源,如对“F”、“G”就需考虑到颜色、长短、粗细。相对而言,字符串的替换并不占用太多的系统资源,结果造成了生成时间并不与树木深度的一齐增加。另外,从而L-System可以很好地反映出树木的趋光性,用它模拟出的树木也较为生动。

 

实验三、BSPL-System的优化算法在相同法则不同深度下的对比实验

 

实验项目

实验序号

递归深度

步长

(像素)

生成经过的时间(毫微秒)

生成的结点数

图形编号

1

3

250

7656250

156

5-3-1

2

4

250

468750

781

5-3-2

3

5

250

2656250

4532

5-3-3

4

6

250

12343750

21584

5-3-4

5

7

250

47968750

98410

5-3-5

6

8

250

185312500

394571

5-3-6

 

 

 

 

 

 

 

 

 

 

 

 


5-3-1                    5-3-2                   5-3-3

 

 

 

 

 

 

 

 

 

 

 

 


5.3.4                5.3.5                     5.3.6

 

实验三数据图表:

实验三结果讨论:

通过实验三,我们可以观察到:在步长不变(为250像素)的情况下,结点数随着递归深度的增加而增加。生成树木经过的时间仍有波动,而且深度越大,波动越明显,这从另一方面也可以看出程序为提高树木的逼真度作了更大的工作。的确,BSPL-System优化,能对颜色、角度等方面进行更有力地控制,还考虑到了树木的生物属性——如剪枝、顶端优势等。BSPL-System的优化生成树木的逼真度明显高于实验一、二生成的树木,其生成树木的复杂性指标——结点数更是前两者无法比拟。改进后的L-System拥有极高的效率,这正是我们所需要的。

实验对照表

 

 

递归深度

步长

(像素)

生成经过的时间

(毫微秒)

生成的

结点数

图形

编号

BSP

4

250

312500

147

5-1-2

L-System

250

100242

781

5-2-1

优化

250

468750

19

5-3-2

BSP

5

250

1875000

777

5-1-3

L-System(改进前)

250

200288

125

5-2-2

优化

250

2656250

4532

5-3-3

BSP

6

250

7812500

3296

5-1-4

L-System(改进前)

250

1802592

1109

5-2-3

优化

250

12343750

21584

5-3-4

BSP

7

250

30468750

14065

5-1-5

L-System(改进前)

250

16724048

8381

5-2-4

优化

250

17968750

98410

5-3-5

 

对照表讨论:

通过对照表,我们可以观察到:无论是实验一、实验二,还是实验三,在步长不变(为250像素)的情况下,结点数都随着递归深度的增加而增加。而生成时间都出现波动,其中实验一与实验三数据图表的走向线较为相似。L-System得益于它独特的字符串替换算法,生成的结点按数量级增长。但由于L-System的初始结点数太少,所以复杂度只能稍稍超过我们的要求,这也是促使我们改进的动力之一。实验一(BSP)的各项指标中规中矩。最优秀的是实验三BSPL-System的优化算法,以递归深度7为例, BSPL-System的优化算法的生成时间为17968750毫微秒,与L-System的生成时间16724048毫微秒相近,是BSP生成时间30468750毫微秒的1/3;生成的结点数98410是实验一结点数140658.5倍,实验二结点数838112倍,数字非常惊人。所以效率也最优。

通过比较,可见BSPL-System的优化算法结合了BSP易控制、形态生动多样与L-System高效的优势,我们的努力也收到了预想中的结果,取得了成功。

 

.应用前景

 

我们这个研究项目除了可以对自然界的景物进行研究外,还有很大的发展空间。在各个方面都很有优势,如在军事、农业、商业、3D平面设计方面都可以广泛采用

(一)  、军事方面

使用如此真实的效果可以模拟出整个作战的场地,进行模拟战斗,进而来训练军人。如果到了真的战争场景我们还可以把敌人的数据,我军的数据以及方位使用这个系统进行模拟生成出真实的作战情况图,有了这样的地图就可以非常真实的显示出即时的作战情况,便于调动兵力。

(二)、在农业方面

在农业方面使用这个系统能够非常逼真地模拟树木地生长情况,如果在系统里面加进其他因素,如植物地阳光照射情况,植物地水分吸收情况等等就可以非常真实地模拟出植物一生的生长情况,让农民朋友们根据这样地推算来计算出,植物需要地水分,肥料等等,使植物在最好地环境下生长以达到最好地生长效果增加产量。

三)3D方面的应用

这个系统同样可以应用在3D游戏的模拟中,我们知道玩大型的3D游戏需要有比较高的系统配置。有很大的内存空间,比较好的显卡等等。但是这些配置对于普通的人来说难以实现,但是用我们研究的这种技术的话,不但不需要很好配置,而且速度也是很快的。所以应用这种是一种有很高使用性的技术.

 

 

结语

 

以上就是我们研究的成果。BSPL-System算法的合并不但能使模拟出来的树木形态各异,逼真生动,而且能满足农业、工业、军事等方面要求。只要计算机的速度达到一定的标准,我们可以模拟出大自然中的每一棵树木的形态及其生长过程。

本项目最不同与以往的是在于自然景物的模拟是用数学模型来描述的,也就是说通过不同的参量来控制树木的形态;其次是用不同的L-System法来描述不同的树木,这也是过去所不可能的;第三,我们这个项目是近代非线形几何的一个创新,它与经典几何是完全不同的。

树木模拟的研究内容非常广泛,就本文的这几种算法而言,仍然有许多值得探讨的问题。比如:

1)  利用三维公告牌技术,模拟三维树木的形态和生长过程(考虑到树木生长的环境—光照、雨水、土壤等等)。

2)  往国外的研究方向发展,做到真正地模拟树木的生长(生根、发芽、生长、枯萎、落叶等等)。

3)  以往模拟生成的树木颜色单一,我们是否能使生成树木的颜色有更多的变化(根部与枝干的对比,老叶与嫩叶的对比等等)。

4)  我们是否能模拟出会开花、结果的树木。

在以后的日子里,我们会对树木模拟这个项目继续进行研究,力求生成形态各异、

栩栩如生的树木。

 

参考文献

 

1 Dr. Heinz Seyringer. Naturewizard. Tutorial 4: Simulation Of Plants. Tutorial 5: Implementation Of L-systems.

2 Implementation Of A Context-sensitive
Lindenmayer-system modeler.  
Bryan Horling. Department of Engineering and Computer Science and Department of Biology,Trinity College, Hartford, CT 06106-3100, USA.

3Nguyen Duc Cuong. Working with L-System. Wed Jul 30 10:37:14 MDT 1997.

4L-System Explorer. Last updated December 28, 2003 at 21:34:45.

5L-SYSTEM. Nguyen Duc Cuong. Wed Jul 30 10:37:14 MDT 1997. 

6 Bendik Stang.Development Snapshot of the Day. October 3, 2002

7Image compression using Lindenmayer. Marko Grroos, February 1999.

8 Taito L-System. Description.

9 Inducible expression of the 2-5A synthetase/RNase L system results in inhibition of vaccinia virus replication. Diaz-Guerra M, Rivas C, Esteban M. CSIC,  Campus Universidad Autonoma, Madrid, 28049, Spain.

10 Daily Times - All Rights Reserved.

11Fractint L-Systems Tutorial A tutorial by William McWorter.

12Three-dimensional L-systems.

13Ted Bach.System Bus Speed.

14RNase L system results in inhibition of vaccinia virus replication.

15Current BSP Work

16BSPlib standard and implementation

17BSP (a Quake editor).

18《关于渲染器的算法讨论》.

19廖文棋.《以机器视觉为基础之虚拟植物系统研究》.

20高旭,姜楠. 《分形L系统理论与植物图像的计算机模拟》.扬州:扬州大学学报, 2000 Vol.3 No.1 P.71-74.

21秦耘. 《影响复迭代分形图的若干因素分析》.陕西:陕西工学院学报, 1999年第15卷第4Vol.15 No.4 1999.

22王显德,罗贤云,陈菊花,张忠治,君眉. 《基于倾斜地面上分形树的电磁散射研究》.电子学报, 1999年第27卷第9Vol.27No.171999.

23陈天滋,李峰. 《植物模拟技术的研究》.计算机应用研究,2000 Vol.17 No.1 P.74-75,77.

24王方石.L-系统在植物模拟中的作用》.北京:北方交通大学学报,1998.6 第三期,22.

25陈昭炯. 《基于L-系统的植物结构形态模拟方法》.计算机辅助设计与图形学学报, 2000 Vol.12 No.8 P.571-574.

26曾文曲.植物的枝的分形算法. 《分形理论与分形的计算机模拟》.