| 查看: 2895 | 回复: 9 | ||||
[交流]
2D凸包Delaunay三角剖分程序 已有3人参与
|
|
之前用Python写的网格程序,速度实在太慢。没有办法,花了几天时间用C++重写了一次,虽然还有很多瑕疵,不过用用已经可以了,一段实现如下剖分的代码和效果: 资料地址:http://persson.berkeley.edu/distmesh/ 程序代码: #include "nr.h" //简易向量矩阵类 #include "distmesh_2d.h" //参考persson的论文写的基于力平衡的网格程序 #include "delaunay.h" //随机增量算法Delaunay三角剖分(效果一般) #include "dfunction.h" //一般区域的符号距离函数 struct Ftor{ vector<Point<2>> poly; Ftor(vector<Point<2>> &polyy):poly(polyy){} Doub fd(const Point<2> &p){ Doub d1=dcircle(p,0.0,0.0,0.5); //圆的符号距离函数 Doub d2=dpoly(p,poly); //多边形的符号距离函数 return ddiff(d2,d1); //区域做差(挖空圆) } Doub fh(const Point<2> &p){ return 0.05+0.3*dcircle(p,0.0,0.0,0.5); //密度函数,内圆处加密 } }; int main(){ ofstream fp("p.txt" ; //输出点分布ofstream ft("t.txt" ; //输出三角形节点编号Doub pi=3.1415926; Box<2> box; //包围区域初始化剖分点 box.lo.x[0]=-1.0;box.lo.x[1]=-1.0; box.hi.x[0]=1.0;box.hi.x[1]=1.0; vector<Point<2>> pfix(6); //生成多边形+固定剖分点 for(int i=0;i<6;i++){ //正六变形生成 Doub theta=pi/3.0; pfix.x[0]=cos(theta*i); pfix.x[1]=sin(theta*i); } Ftor Fun(pfix);; //距离函数和密度函数初始化 Distmesh2d<Ftor> mesh(Fun,0.1,box,pfix); //调用网格程序 //以下输出,Matlab数组是1偏的,三角形编号+1处理 fp<<fixed<<setprecision(4); ft<<fixed<<setprecision(6); int n=mesh.p.size(); for(int i=0;i<n;i++){ fp<<setw(4)<<mesh.p.x[0]<<setw(10)<<mesh.p.x[1]<<endl; } int k=mesh.tri.size(); for(int i=0;i<k;i++){ ft<<setw(10)<<mesh.tri.p[0]+1 <<setw(10)<<mesh.tri.p[1]+1 <<setw(10)<<mesh.tri.p[2]+1<<endl; } fp.close(); ft.close(); cin.get(); return 0; } 密度控制.jpg 1.jpg 2.jpg [ Last edited by nagami on 2015-1-16 at 21:30 ] |
» 收录本帖的淘帖专辑推荐
数学物理计算 |
» 猜你喜欢
上海工程技术大学张培磊教授团队招收博士生
已经有3人回复
上海工程技术大学【激光智能制造】课题组招收硕士
已经有5人回复
求助院士们,这个如何合成呀
已经有4人回复
临港实验室与上科大联培博士招生1名
已经有9人回复
想换工作。大多数高校都是 评职称时 认可5年内在原单位取得的成果吗?
已经有7人回复
需要合成515-64-0,50g,能接单的留言
已经有4人回复
自荐读博
已经有4人回复
写了一篇“相变储能技术在冷库中应用”的论文,论文内容以实验为主,投什么期刊合适?
已经有6人回复
带资进组求博导收留
已经有10人回复
最近几年招的学生写论文不引自己组发的文章
已经有11人回复


2楼2015-01-08 20:30:02

3楼2015-01-08 21:57:52
人走茶不凉
银虫 (职业作家)
- 应助: 9 (幼儿园)
- 金币: 13053.8
- 红花: 3
- 帖子: 3748
- 在线: 708.9小时
- 虫号: 667594
- 注册: 2008-12-04
- 性别: GG
- 专业: 计算机应用技术
4楼2015-01-09 00:45:44

5楼2015-01-09 09:11:10
人走茶不凉
银虫 (职业作家)
- 应助: 9 (幼儿园)
- 金币: 13053.8
- 红花: 3
- 帖子: 3748
- 在线: 708.9小时
- 虫号: 667594
- 注册: 2008-12-04
- 性别: GG
- 专业: 计算机应用技术
6楼2015-01-10 08:03:54
pippi6
铁杆木虫 (著名写手)
工程和科学数值计算咨询
- 数学EPI: 6
- 应助: 413 (硕士)
- 贵宾: 0.002
- 金币: 7116.5
- 散金: 15
- 红花: 63
- 帖子: 1639
- 在线: 798.9小时
- 虫号: 2469437
- 注册: 2013-05-14
- 专业: 计算数学与科学工程计算
7楼2015-01-10 10:52:56
2维的凸包Delauany三角剖分程序:Delaunay和基于力平衡网格光滑化程序:Distmesh2d,OOP方式编写,雏形完成了,给自己庆祝下吧![]() 调试了整整两天,各种问题 这里的论文http://persson.berkeley.edu/distmesh/中的代码,和提供的matlab源程序有几处不一样,按论文里进行点的边界拉回,程序失败,因为没注意到这个,一天的时间耗在了这里,逐句对比内部数据的数量级进行排查,来找错,相当耗精力, 正如所见,边界处的毛刺问题没有解决,还有很多优化的地方,如果在秒级的时间内剖分1000左右点的图形,就差不多了。准备花一个礼拜时间慢慢调整 网格预处理结束,就可以好好欣赏有限元理论了 发几张图,留念下 边界点的受力扩张移动.jpg 程序一角.jpg 椭圆剖分.jpg |
» 本帖已获得的红花(最新10朵)

8楼2015-01-11 23:41:26
18353248802
捐助贵宾 (小有名气)
- 应助: 1 (幼儿园)
- 金币: 1060.2
- 红花: 1
- 帖子: 153
- 在线: 47.6小时
- 虫号: 3673765
- 注册: 2015-02-02
- 专业: 石油、天然气地质学
9楼2016-11-26 16:00:15
18353248802
捐助贵宾 (小有名气)
- 应助: 1 (幼儿园)
- 金币: 1060.2
- 红花: 1
- 帖子: 153
- 在线: 47.6小时
- 虫号: 3673765
- 注册: 2015-02-02
- 专业: 石油、天然气地质学
10楼2016-11-26 16:01:11







; //输出点分布
回复此楼


18353248802