生成三角网算法java_C++ 基于凸包的Delaunay三角网生成算法

Delaunay三角网,写了用半天,调试BUG用了2天……醉了。

基本思路比较简单,但效率并不是很快。

1. 先生成一个凸包;

2. 只考虑凸包上的点,将凸包环切,生成一个三角网,暂时不考虑Delaunay三角网各种规则。将生成的三角形放进三角形集合 Triangles 中;

3.将其它非凸包上的点全都插入。每插入一个点 ptA,都要判断被插入的点存在于 Triangles 集合的哪个三角形(trianA)之内,并将 ptA 与此三角形的三个点进行连接,删除 trianA,并将新生成的三角形加入到集合 Triangles 中。初始三角网生成结束;

3.1. 若 ptA 处在三角形DEF的DE边上,那么只连接点F与ptA ;

4.遍历三角形集合 Triangles(曾考虑用邻接矩阵,但是使用矩阵的复杂度反而会更高),每遍历到一个三角形DEF,都要遍历DEF的三条边DE,EF, FD,并分别寻找另外一个三角形,此三角形与DEF存在一个公共边;

5.使用LOP(Local Optimization Procedure: 局部优化处理)处理步骤4返回的两个三角形 与DEG。

5.1. 做三角形DEF的外接圆cirDEF,如果点G在圆cirDEF之内,则从Triangles 集合中删除三角形DEF与DEG,并加入两个新三角形:FGD与FGE。实际上,是将两个三角形组成的四边形的对角线对调了。

6.使用新生成的两个三角形FGD与FGE执行步骤5,递归。递归出口为,对三角形进行LOP处理时,没有出现5.1的情况。

Note:

1.暂时存在的问题:

a. 当点数过多时,生成过程中会出现“栈溢出”情况。测试时,2000个点之内是成功的。此情况是由于三角形过多导致的递归过深,需要重新组织算法结构才能避免。

b. 生成时间太长。可采取的办法1是完全采用不同的生成算法,比如分块等等。其次是由于寻找三角形的复杂度过高,达到了O(n),利用空间换时间的办法能接近O(1),只不过多一个成员来存储三角形的拓扑结构,这个比较简单但优化效果有限。

2. 一旦遇到了一些算法上的问题,那么搬出数学知识往往非常有效(尽管我的数学水平一望见底)。使用矩阵的方式能够让算法的实现更加清晰,但复杂度有可能会升高。

File: Delaunay.h

1 #pragma once

2

3 #include "ConvexHull.h"

4 #include "Triangle.h"

5 #include "Circle.cpp"

6

7 classTrianIndex final8 {9 public:10 TrianIndex()11 {12 _isVaild = false;13 }14

15 ~TrianIndex()16 {17 _isVaild = false;18 }19

20 TrianIndex(unsigned int iA, unsigned int iB, unsigned intiC)21 {22 Init(iA, iB, iC);23 }24

25 TrianIndex(std::arraypts) :26 TrianIndex(pts[0], pts[1], pts[2])27 {28 }29

30 TrianIndex(const TrianIndex&other)31 {32 this->_isVaild =other._isVaild;33 this->_ptIdx =other._ptIdx;34 }35

36 unsigned int& Get(inti)37 {38 if (i < 0 || i > 2 || !_isVaild)39 {40 ErrorThrow("Error Triangle Point Index[0, 2] Or Invaild Triangle:" +std::to_string(i));41 return _ptIdx[0];42 }43

44 return_ptIdx[i];45 }46

47 unsigned int& operator[](inti)48 {49 returnGet(i);50 }51

52 const unsigned int Get(int i) const

53 {54 TrianIndex* pThis = const_cast(this);55 return pThis->Get(i);56 }57

58 const unsigned int operator[](int i) const

59 {60 TrianIndex* pThis = const_cast(this);61 return (*pThis)[i];62 }63

64 TrianIndex& operator=(const TrianIndex&other)65 {66 this->_isVaild =other._isVaild;67 this->_ptIdx =other._ptIdx;68 return *this;69 }70

71 bool IsVaild() const

72 {73 return_isVaild;74 }75

76 void SetVaild(boolisVaild)77 {78 _isVaild =isVaild;79 }80

81 void Init(unsigned int iA, unsigned int iB, unsigned intiC)82 {83 _ptIdx[0] =iA;84 _ptIdx[1] =iB;85 _ptIdx[2] =iC;86 _isVaild = true;87 }88

89 private:90 bool_isVaild;91 std::array_ptIdx;92 };93

94 //CHECK IT: It Has Been Abandoned.95 //96 classTrianMatrix final97 {98 public:99 enum IsConnected : bool

100 {101 NotConnected = false,102 Connected = true

103 };104

105 TrianMatrix():106 TrianMatrix(0)107 {108 }109

110 TrianMatrix(size_t ptCount)111 {112 _sign.clear();113 _sign.resize(ptCount);114 for (unsigned int x = 0; x < ptCount; ++x)115 {116 _sign[x].resize(ptCount);117 for (unsigned int y = 0; y < ptCount; ++y)1

kintana moro
关注 关注
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【保姆级教程】三角网生成库---triangle快速入门及使用说明(再不会就说不过去了啊兄弟)
韦_恩的博客
10-31 4642
今天我先讲一下triangle三角构网库,这个库不但运行效率高、并且能通过几个参数轻松的解决前面所述的全部问题。但是他的很多命令,很多人还是不清楚,以至于不知道如何上手。这篇博文在总结了我应用的基础上带领大家快速、轻松入门triangle使用!
Java输入三条边判断是否能组成三角形,若能构成则输出什么三角形
赵士杰——成功并非一蹴而就,而是在持之以恒的努力中逐渐实现。
10-12 1万+
问题 输入三条边判断是否能组成三角形,若能构成则输出什么三角形 思路 任意两条边之和大于第三条边,构成三角形 三角形两条边相等,等腰三角形 三角形三边相等,等边三角形 代码实现 Scanner scanner = new Scanner(System.in); int a=0,b=0,c=0,i=0; a=scanner.nextInt(); b=scanner.nextInt(); c=scanner.nextInt(
三角网(TIN)生成算法的原理及实现(有代码!!!)
最新发布
m0_51638913的博客
03-12 1933
前段时间我导给我提出了一个任务,让我提取出离散点的外围边界点。作为技术小白的我,在网上狂搜资料。也走了很多弯路,最终根据Delaunay的三角形的特点(即所有三角形边中,只存在一个三角形中的边即为轮廓边,包含的点即为轮廓点。)来完成。csdn上也有很多写得很好的博客,我就用自己的想法同时参考《Delaunay 三角网生长算法改进与实现》这篇文章来叙述三角网生长算法构建过程及原理。同时结合python/C++代码,让大家更好的实现Tin!
VTK(Activiz)场景应用:将离散点构建三角网、等值线、颜色渲染、等值线值标注
做一名持续学习的GIS Coder
03-18 3722
1 概括 现阶段了解下,对已有离散点进行三角剖分构建三角网,并进行具有实际含义(降雨量、含水量)的属性颜色渲染、等值线构建、等值线值的标注有如下思路。特别感谢前辈“硫酸亚铜”的经验分享,前辈的博客基于VTK的C++版本进行,个人开发采用的是VTK的C#版本(Activiz),现将实现总结如下。 前辈“硫酸亚铜”的Demo生成效果: ![](https://img-blog.csdnimg.cn/img_convert/337a8c91f19e96817edede8a1eac0bee.png#align=le
Delaunay三角网生成算法(转)
weixin_33984032的博客
06-12 2046
Delaunay三角网满足这样的法则:Delaunay三角网为相互邻接且互不重叠的三角形的集合,每一个三角形的外接圆内不包含其他点。Delaunay三角网由对应Voronoi多边形的点连接而成。Delaunay三角形有三个相邻点连接而成,这三个相邻顶点对应的Voronoi多边形有一个公共的顶点,此顶点是Delaunay三角形外接圆的圆心(如图1)。 根据构建三角网的步骤,可将三角网生成算法分为三类...
三角网算法
XiaoCai
11-02 3544
1. 基本概念        三角网是由一系列连续三角形构成的网状的平面控制图形,是三角测量中布设连续三角形的两种主要扩展形式,同时向各方向扩展而构成网状,优点为点位分布均匀、各点之间互相牵制、图形强度较高,缺点是扩展较缓慢。        三角网是实现地形三维可视化,数字地面模型(Digital Terrain Model,简称DTM)是一种很有效的途径。DTM主要是
一种基于Graham三角剖分生成Delaunay三角网算法 (2007年)
04-21
目的提出一种基于Graham三角剖分生成Delaunay三角网算法,加快Delaunay三角网生成速度。方法首先按Graham扫描法对平面散乱点集进行排序,然后将排好序的点通过可见点的判断连接成Graham三角网,最后利用拓扑结构...
Delaunay三角剖分算法
05-29
Delaunay三角剖分算法 1. 三角剖分与Delaunay剖分的定义 如何把一个散点集合剖分成不均匀的三角形网格,这就是散点集的三角剖分问题,散点集的三角剖分,对数值分析以及图形学来说,都是极为重要的一项预处理技术。 ...
Delaunay三角网剖分
01-16
最近由于做毕设的原因,所以自己写了一个关于不规则三角网的代码,生成三角网经过和网上的一些代码相比,生成的网格是完全凸包,可能更加好一些。有什么问题可以指正。
Delaunay三角网凸包生成算法
11-24
本程序暂时只提供从点生成TIN的凸包收缩方法,且效率不高,仅供参考 本程序暂时不能生成点、线、三角形之间的拓扑关系,有兴趣的可以自己做修改 本程序暂时只能保存自定义TIN格式的文本文件(可以用记事本打开),只保存...
Computational Geometry Toolbox:凸包、网格生成Delaunay三角剖分、Voronoi图等算法。-matlab开发
05-30
函数“ convhull_nd”使用凸包算法,函数“ delaunay_nd”使用Delaunay三角剖分,函数“ voronoi_nd”使用Voronoi图。 此包中包含的所有函数均可用于任何维度 n。 文件“内容”中包含的许多示例说明了上述三个函数...
最快的TIN三角网生成算法
06-27
最快的TIN三角网生成算法 最快的TIN三角网生成算法 最快的TIN三角网生成算法 最快的TIN三角网生成算法 TIN 三角网 最快 vc(6.0) TIN 三角网 最快 vc(6.0) TIN 三角网 最快 vc(6.0)
delaunay三角网生成算法
09-06
delauany三角网生成算法,根据二维表面的随机点可以生成三角网,模拟三维地形。
TIN(delaunay三角网生成算法
02-20
使用C#实现的delaunay三角网生成算法。使用说明:运行后在窗口中单击鼠标添加样采样点,当采样点大于等于3时自动生成delaunay三角网;点击工具栏上的按钮可以显示每个三角形的外心。
老外写的Delaunay三角网剖分算法,速度超快,值得一学
07-14
老外写的Delaunay三角网剖分算法,速度超快,值得一学
C++写的 离散点画Tin三角网程序,有源文件,有安装文件
08-07
很好的离散点绘制三角网代码(包含源程序+测试数据)
[图形学]Delaunay三角剖分算法C++实现
热门推荐
wk_119的博客
08-15 1万+
完整代码已上传:点击此处 将离散点构成三角网,这种三角网称为Delaunay三角网 Delaunay剖分具备的优异特性有(来自百度百科): 1.最接近:以最近的三点形成三角形,且各线段(三角形的边)皆不相交。 2.唯一性:不论从区域何处开始构建,最终都将得到一致的结果。 3.最优性:任意两个相邻三角形形成的四边形的对角线如果可以互换的话,那么两个三角形六个内角中最小的角度不会变大。 ...
二维delaunay(Voronoi图)算法与实现(C++、OpenCv、)
今天写代码了吗
08-25 5176
定义: 三角剖分: 假设V是二维实数域上的有限点集,边e是由点集中的点作为端点构成的封闭线段, E为e的集合。那么该点集V的一个三角剖分T=(V,E)是一个平面图G,该平面图满足条件: 1.除了端点,平面图中的边不包含点集中的任何点。 2.没有相交边。 3.平面图中所有的面都是三角面,且所有三角面的合集是散点集V的凸包 tips:在二维欧几里得空间中,凸包可想象为一条刚好包著所有点的橡皮圈。(用不严谨的话来讲,给定二维平面上的点集,凸包就是将最外层的点连接起来构成的多边形,它能包含点集中所有的点。)
PCL 逐点插入法构建Delaunay三角网C++详细过程版)
点云侠的博客
01-09 2234
点云构建Delaunay三角网的逐点插入法基于PCL点云库的C++详细过程版实现
C++ 基于凸包Delaunay三角网生成算法
06-03
基于凸包Delaunay三角网生成算法,又称“增量法”,是一种广泛使用的Delaunay三角网生成算法。它的基本思路是:从已有的凸包开始,每次加入一个新的点,对其进行“翻转”操作,使其满足Delaunay条件,直到所有点都...

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • 十代主板改win7_微星h410主板装win7系统及bios设置教程(支持10代usb) 10646
  • 计算机网络电缆被拔出是怎么办,解决Windows7系统下本地连接显示网络电缆被拔出的方法... 5222
  • 计算机关机的DOS命令是,如何设置电脑自动关机dos指令 4635
  • android frp分区,在安卓手机上运行FRP 4083
  • matlab将excel读进工作区,matlab读取excel文件中的数据 3636

您愿意向朋友推荐“博客详情页”吗?

  • 强烈不推荐
  • 不推荐
  • 一般般
  • 推荐
  • 强烈推荐
提交

最新文章

  • 虚拟vpc服务器搭建,虚拟私有云VPC搭建IPv6网络
  • 赛尔号12点服务器维护多久,赛尔号只有真正老玩家才知道的事?光螳螂半夜12点的传言知道吗?...
  • ftp服务器连接成功不显示端口,【ftp telnet 都连接不上,只有ssh能用,怎么设置一下】_端口 服务器_全球新能源网...
2021年129篇
2020年19篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

深圳SEO优化公司嘉兴设计公司网站报价安庆模板网站建设报价金华网站改版价格郑州百度竞价包年推广公司北海seo网站优化多少钱佛山建设网站推荐潍坊推广网站报价惠州百姓网标王推广哪家好芜湖设计网站公司济源SEO按天计费哪家好楚雄关键词按天计费公司白山网站优化按天计费多少钱亳州优化哪家好邯郸企业网站设计公司晋城设计公司网站铜川网站设计布吉建网站多少钱大鹏网站制作设计湘潭优化佛山模板网站建设推荐黔东南外贸网站制作推荐同乐SEO按天扣费价格怒江网站推广工具价格汕尾seo网站优化价格阳泉seo优化价格淮南网络广告推广价格广安seo多少钱昆明网站优化推广多少钱滨州品牌网站设计推荐渭南百度标王价格歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化