一种基于簇聚类的风吹有叶树摇曳模拟方法

文档序号:8298909阅读:261来源:国知局
一种基于簇聚类的风吹有叶树摇曳模拟方法
【技术领域】
[0001] 本发明属于计算机图形学与数学建模技术领域相结合的交叉学科技术领域,具体 涉及一种基于簇聚类的风吹有叶树摇曳模拟方法。
【背景技术】
[0002] 随着计算机性能的提高和计算机图形学的发展,自然场景建模的研宄已经应用到 许多领域,如:游戏产业、影视特效领域等。树作为自然场景中的重要组成部分,其形态的逼 真模拟程度能有效增加场景的生动性。传统的粒子系统和纹理映射方法,可以简单的模拟 一些风、河流、雨、雪等自然现象,但其运动模拟的真实性和复杂性与现实场景还有很大的 距离。
[0003] 随着计算机仿真技术的发展,树的静态模拟已不能满足现实应用的要求,对于树 因自然界外力影响而摆动的模拟成为新的研宄热点。在大气中的风对树的运动起到了至关 重要的作用,风作为无形的流体,其形态复杂多变,并不断影响着周围的环境,对于有叶树 的摇曳来说更是如此。且树的动态模拟涉及到大气动力学、材料力学和物理学等多个学科, 要想实现风力作用下的有叶树摇曳的实时逼真模拟是计算机图形学和数学建模中一个难 题。
[0004] 早期的树动态模拟研宄是基于粒子系统和纹理映射,其实现方法简单但模拟效果 粗糙,人工痕迹十分明显。近年来,随着计算机图形学的不断发展,国内外学者对树动态模 拟的研宄工作越来越多,其模拟效果也越来越逼真。Shinya通过构造一个随机风场,利用模 态分析方法模拟树在风的摇曳。Hiromi利用Perlin噪声函数生成所需要的风场,采用分 形算法递归出树的形状,并利用弹簧质量模型计算树枝的形变。Stam模拟了树的枝条在湍 流风场中的运动,模拟出树的枝条的摆动效果。孙建发等人提出在三维树的递归生成过程 中应用矢量合成原理,生成树在风中运动的动画,该方法可以简单的实现树运动模拟,但模 拟效果比较粗糙。胡潇毅等人提出了一种基于动力学有限元的方法模拟树在风中的摇曳运 动,将圆柱绕流的涡致振动理论应用到树枝在风中受到的脉动升力和阻力的计算,该方法 考虑了树与风场之间的流固耦合,可以模拟不同风力等级下树的运动。
[0005] 然而,目前相关研宄均是基于树完全处于风影响的状态下进行模拟的。但现实情 况中,树受到风影响时往往是树的局部受风影响,而不仅仅是整个树。

【发明内容】

[0006] 本发明的目的是提供一种基于簇聚类的风吹有叶树摇曳模拟方法,解决了现有技 术不能重建出有叶树的局部与风发生相互作用产生摇曳运动的问题。
[0007] 本发明所采用的技术方案是,一种基于簇聚类的风吹有叶树摇曳模拟方法,具体 按照以下步骤实施:
[0008] 步骤1、划分有叶树;
[0009] 步骤2、将步骤1中划分后的每一等份的有叶树的树叶进行密度聚类,生成多个叶 簇;
[0010] 步骤3、根据步骤2中的叶簇接受风力作用的先后顺序建立叶簇的拓扑结构;
[0011] 步骤4、计算步骤3中叶簇拓扑结构中的叶簇节点及其相连的树枝和树干受到的 风力大小,并结合悬臂梁模型计算树杆件在风中的形变,通过相对位置进行整合形成有叶 树的联动摇曳模拟。
[0012] 本发明的特点还在于,
[0013] 步骤1有叶树的划分具体为:
[0014] 步骤L1、初始化状态位sum= 1,每一等份无叶树受到的风速为speec^i0,并备 份为copyspeec^z0,以区别不同状态下每一等份受到的风速;其中,sum为第sum次计算 风速,i为无叶树划分的等份数;
[0015] 步骤1. 2、计算树干骨架点到风源的距离
[0016] 假定风与Z轴正向的夹角为zWind,从Z轴正向往下看,风与X轴的逆时针夹角为 xWind,根据球坐标系建立风的单位向量:
【主权项】
1. 一种基于簇聚类的风吹有叶树摇曳模拟方法,其特征在于,具体按照以下步骤实 施: 步骤1、划分有叶树; 步骤2、将步骤1中划分后的每一等份的有叶树的树叶进行密度聚类,生成多个叶簇; 步骤3、根据步骤2中的叶簇接受风力作用的先后顺序建立叶簇的拓扑结构; 步骤4、计算步骤3中叶簇拓扑结构中的叶簇节点及其相连的树枝和树干受到的风力 大小,并结合悬臂梁模型计算树杆件在风中的形变,通过相对位置进行整合形成有叶树的 联动摇曳模拟。
2. 根据权利要求1的一种基于簇聚类的风吹有叶树摇曳模拟方法,其特征在于,所述 步骤1有叶树的划分具体为: 步骤1. 1、初始化状态位sum = 1,每一等份无叶树受到的风速为speedii 0,并备份为 copyspeedii 0,以区别不同状态下每一等份受到的风速;其中,sum为第sum次计算风速, i为无叶树划分的等份数; 步骤1. 2、计算树干骨架点到风源的距离 假定风与Z轴正向的夹角为zWind,从Z轴正向往下看,风与X轴的逆时针夹角为 xWind,根据球坐标系建立风的单位向量:
风向在X0Y面上的投影向量 树干骨架点到风源的距离为:
取最小值dmin,阈值sheld = dmin/2,状态位j = 2,同时备份风速speedj^值到 copyspeedi*,其中j表示无叶树的第j等份; 步骤1. 3、将所有到风源的距离小于sheld的树干骨架点和树枝所在圆环圆心归为第 一等份,记为unit1;根据初始风速计算风吹过第一等份所花费的时间t sum,并将衰减后的风 速存入speech中,sum++ ;如果此时unit丨受到的风速copyspeed丨辛0,表示还需继续划分, 转到步骤1. 4 ;如果copyspeec^i 0,表示划分结束,并转到步骤1. 2 ; 步骤1. 4、阈值sheld = sheld+copyspeed^,tj,将所有到风源的距离小于sheld的树 干骨架点和树枝所在圆环圆心归为第j等份,记为unit』;根据风速copyspeed ^计算风吹 过第j等份后的风速,并存入speed』中,j++ ;如果此时unit』受到的风速copyspeed』乒0, 表示还需继续划分,重复步骤1. 4,直到j > sum ;如果copyspeedj= 0,表示划分结束,并转 到步骤1. 2。
3. 根据权利要求2的一种基于簇聚类的风吹有叶树摇曳模拟方法,其特征在于,所述 步骤1. 4中风吹过第j等份后的风速speed』计算方法为:
其中,Vte6为第j等份的树的体积,V为第j等份的总体积。
4. 根据权利要求1的一种基于簇聚类的风吹有叶树摇曳模拟方法,其特征在于,所述 步骤2中有叶树的树叶的密度聚类具体包括以下步骤: 步骤2. 1、取每个树叶的叶柄的第一个点代表整个叶子,将其存入数组dataSets中,并 设其访问状态为false,所属聚类cluster为"0"; 步骤2. 2、查找数组dataSets中的每一个访问状态为false的点pQ的近邻点域中的点 Pi,如果点Pc!与点P i的距离不大于设定的阈值t,则将点p i加入点p ^的邻域中,并存入邻 域列表PQ. Fieldld ;如果两点的距离介于(t,2t)之间,则将点?1插入容器VectPt,并记 录插入元素个数VectNum ; 步骤2. 3、如果点P(l的邻域中的点个数不小于阈值k,则设置点p ^为核心点,置点p ^及 邻域中的点的访问状态为true,此时以Pc!为核心点的近邻点域为一个聚类,cluster++ ;如 果点P〇不是核心点,贝1」从容器VectPt中删除VectNum个元素; 步骤2. 4、依次查找步骤2. 2中所述容器VectPt中的点Pi的近邻点域中的点q,如果点 Pi与点q的距离不大于设定的阈值t,则将点q加入点p i的领域中;如果点p i的领域中的 点个数不小于阈值k,点仏为核心点,则置点p ,及点q的访问状态为true,并将点p i及点q 加入到pQ所在的聚类,然后从容器VectPt中删除点p i;如果点p i不是核心点,则直接将点 Pi从容器VectPt中删除; 步骤2. 5、继续从步骤2. 2执行,直至遍历完所有点; 步骤2. 6、修改步骤2. 2中的阈值t,继续从步骤2. 2执行,直至所有点均被归入聚类, 即将有叶树的树叶按不同密度聚类,生成多个叶簇。
5.根据权利要求4的一种基于簇聚类的风吹有叶树摇曳模拟方法,其特征在于,所述 步骤3中叶簇的拓扑结构的建立方法为: 步骤3. 1、建立叶簇的树形结构treenode,并初始化:读取数组dataSets中的第一个点Pci (X。,yQ,zQ),记为根节点root ;将点pQ所在聚类存入treenode. clusterld中,p。的坐标值 (X。,yQ, zQ)均存入 treenode. Min 和 treenode. Max 中;令节点中叶子个数 treenode. num = 1 ; 步骤 3. 2、令 treenode = root,读取数组 dataSets 中的
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1