- 1、本文档共18页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Delaunay剖分
三、设计一种不规则三角网数据结构,并利用该数据结构编程实现对任意区域地面特性采样点的Delauney三角网剖分,要求给出算法模型、程序代码及运行结果(20分)。
算法模型:
生成Delaunay三角网主要有边扩展法、逐点插入法、分治算法,其中边扩展算法简单且易于实现。该算法的基本思想是首先找出点集中距离最短的两点并连线,然后在该线段的右边找到与此两点构成Delaunay三角形的第3点,从而形成Delaunay三角网的第1个三角形;从新生成的边出发继续搜索第3点并扩展,直至所有的边被扩展完毕。在三角形生成的过程中需要作如下约定:边是有向边,其右侧三角形为右三角形,左侧三角形为左三角形,所有三角形3个顶点均按逆时针排列。边左侧为三角形内部,右侧为三角形外部,左右三角形的公共边方向相反。在上述约定下便可以检查边是否有左右三角形来判断边是否已生成扩展,若其左侧有三角形表明已生成,右侧有三角形则表明已扩展。
生成Delaunay三角网主要有如下步骤:
1)从离散点集中任选一点Point1作为一条边的起点,搜索距此点距离最近的点Point3作为边的终点。这样生成了一条边。在该边右侧找到能够与此两点构成Delaunay三角形的point2点;如果搜索不到,则将Point1作为终点,Point3作为起点重新搜索,从而构成第1个三角形。为了使3个点按逆时针排列,即Point2点总是在Point1、Point3连线的右侧,找到的Point2总是作为三角形的第二个点。
2)将3个点生成一个三角形对象Triangle,并以此3点生成3个边对象triEdge1、TriEdge2、TriEdge3,将3条边的左三角形(LTriangle)设置为已生成的三角形Triangle,将Triangle3个边指针分别指向TriEdge1、TriEdge2、TriEdge3,然后将TriEdge1、Triedge2、TriEdge3加入m_TriEdgeTemp中(m_TriEdgeTemp记录生成但未扩展的边),将首个三角形加入m_Triangle(m_Triangle记录生成的三角形)。至此首个三角形生成,并且保存了相应的拓扑关系。
3)判断m_TriEdgeTemp是否为空。如果为空说明所有的边已经扩展完毕。此时该算法结束;如果不空则弹出一条边TriEdge。根据Delaunay三角网的性质在该边右侧搜索最符合的第三点。
4)若没搜索到,则说明该边是离散点集Delaunay三角网边缘的边,其右侧没有与其构成Delaunay三角形的点;若搜索到,则将它作为三角形的第二点,并以待扩展边TriEdge的始点为第1点,终点为第3点,生成新的三角形对象Triangle,按3点顺序生成3个边对象TriEdge1、TriEdge2、TriEdge3。
5)将此三边的左三角形LTriangle设为Triangle,将Triangle的3个边指针指向TriEdge1、TriEdge2、TriEdge3;将TriEdge的LTriangle赋值给TriEdge3的RTriangle,将TriEdge3的LTriangle复制给TriEdge的RTriangle(TriEdge和TriEdge3是同一条边,但方向相反)。将新生成的三角形加入m_Triangle。
6)分别检查TriEdge1和TriEdge2是否已被生成。在m_TriEdgeTemp中搜索与TriEdge1(或TriEdge2)方向相反的边。若找到则说明此边已经被生成过,将搜索到的边从m_TriEdgeTemp中删去,若未搜索到,则将TriEdge1(或TriEdge2)加入m_TriEdgeTemp。
7)重复步骤3到6,直到m_TriEdgeTemp为空。此时已经生成离散点集的Delaunay三角网。
查找第3点时首先要判断第3点与扩展边的关系,然后再根据Delaunay三角网的最大最小角定理查找最佳第3点。
判断第三点与TriEdge的关系用到向量积理论:设Point1(x1,y1),Point2(x2,y2)为TriEdge的起点和终点,Point0(x0,y0)为待判断点,r为判断结果,根据下式:r=(x0-x1)x(y2-y1)-(y0-y1)x(x2-x1),如果r=0,则该点位于TriEdge上;r0,则位于其右边,否则位于其左边。
在搜索最佳第三点时利用余弦定理,主要通过遍历m_TriPoint数组,查找使r0 且张角最大的点,即是。因为余弦函数在[0,]区 间为单调递减函数,直接查找余弦值为最小的点即为最佳第3点。
程序代码为:
1)点类TriPoint.cs:
public class TriPoint
您可能关注的文档
最近下载
- 《克拉玛依市城市总体规划》(2014-2030年).pdf
- The Blue Planet《蓝色星球(2001)》第一季第三集完整中英文对照剧本.docx VIP
- 新教科版五年级上册科学全册教学反思.doc
- 抗风湿病药物性肝损伤诊治中国专家共识(2024年版)解读.pptx
- GB 50966-2014 电动汽车充电站设计规范.docx
- 国家开放大学《商务英语4》章节自测1-8参考答案.pdf
- 实验九 动物细胞内微丝结构的观察(鬼笔环肽标记法).ppt
- 全国大学生职业规划大赛获奖PPT模板.pptx
- 《机械设计基础(第三版)习题册》参考答案.pdf VIP
- The Blue Planet《蓝色星球(2001)》第一季第四集完整中英文对照剧本.docx VIP
文档评论(0)