Delaunay三角网关键技术探讨
Delaunay三角剖分及matlab实例

Delaunay三⾓剖分及matlab实例鉴于Delaunay三⾓剖分在点云拟合⽅⾯有不错的应⽤,现对该算法的原理进⾏简单的汇总~----------------------------原理部分------------------------1、三⾓剖分与Delaunay剖分的定义如何把⼀个离散⼏何剖分成不均匀的三⾓形⽹格,这就是离散点的三⾓剖分问题,散点集的三⾓剖分,对数值分析以及图形学来说,都是极为重要的⼀项处理技术。
该问题图⽰如下:1.1 三⾓剖分定义【定义】三⾓剖分:假设V是⼆维实数域上的有限点集,边e是由点集中的点作为端点构成的封闭线段,E为e的集合。
那么该点集V的⼀个三⾓剖分T=(V,E)是⼀个平⾯图G,该平⾯图满⾜条件:1、除了端点,平⾯图中的边不包含点集中的任何点。
2、没有相交边。
//边和边没有交叉点3、平⾯图中所有的⾯都是三⾓⾯,且所有三⾓⾯的合集是散点集V的凸包。
//:⽤不严谨的话来讲,给定⼆维平⾯上的点集,凸包就是将最外层的点连接起来构成的凸多边型,它能包含点集中所有的点。
1.2 Delaunay三⾓剖分的定义在实际中运⽤的最多的三⾓剖分是Delaunay三⾓剖分,它是⼀种特殊的三⾓剖分。
先从Delaunay边说起:【定义】Delaunay边:假设E中的⼀条边e(两个端点为a,b),e若满⾜下列条件,则称之为Delaunay边:存在⼀个圆经过a,b亮点,圆内(注意是园内,圆上最多三点共圆)不含点集V中任何其他的点,这⼀特性⼜称空圆特性。
【定义】Delaunay三⾓剖分:如果点集V的⼀个三⾓剖分T只包含Delaunay边,那么该三⾓剖分称为Delaunay三⾓剖分。
1.3 Delaunay三⾓剖分的准则要满⾜Delaunay三⾓剖分的定义,必须符合两个重要的准则:1、空圆特性:Delaunay三⾓⽹是唯⼀的(任意四点不能共圆),在Delaunay三⾓形⽹中任⼀三⾓形的外接圆范围内不会有其它点存在。
Delaunay三角剖分

2.没有相交边。(边和边没有交叉点)
3.平面图中所有的面都是三角面.且所有三介面的合集堆散点集V的凸包。
1.2 Delaunay
在实际中运用的鼓多的三角別分是Delaunay三角剖分.它绘一种待殊的三角剖分。先从Delaunay边说起:
【定义】Delaunay边:假设E中的一条边e(两个端点为a,b)> e若满足下列条件.则称Z为Delaunay边:存在一个閲
丄・CvPoint2D32f fp;//This is our point holder//;.^我心点的f•} fIRS)
2・for(i = 0; i < as_many_points_as_you_want; i++ ) {
3・//However you want to set points〃如果我们的点集不足32位的.在这里我们将其转为CvPoint2D32于・如下两种方法.
第//
5.fp=your_32f_point_list[i];
6.cvSubdiv0elaunay2DInsert( subdiv, fp )j
7・}
转换为
1)
2)
肖可以通过输入点(散点集)得到
1.cvCalcSubdivVoronoi2D( subdiv);//Fill out Voronoi data in subdiv〃在subdiv充Vornoi的数州
1.
以下是Delaunay剖分所具备的优异特性:
1x最接近:以掖接近的三点形成三角形.且各线段《三角行的边〉皆不相交。
2.唯一性:不论从区域何处开始构建.最终都将得到一致的结果。
3.眾优性:任惫两个相邻三角形构成的凸四边形的对角线如何可以互换的话.那么两个三角形六个内角屮最小角度不 会变化,
利用Delaunay三角网插值煤层零点线的方法研究

零点边界线是矿体厚度或有用组份含量趋近于零的各点的联线,也就是矿体尖灭点的联线。
在煤田地质勘探应用中,三维建模、编制等厚线图等都需要确定煤层零点线。
在三维建模中,我们需要计算煤层零点线,以确定煤层分布范围。
在计算等厚线图时,需要用零点线去插值可采线和其他厚度线。
以前零点线都是用手工的方法去确定并连线的,然后再用手工的方法产生其它厚度线,很容易出错也容易丢线。
本文提出的零点线插值方法准确快速,为今后计算机成图提供了一种较快捷的方法。
1Delaunay 三角网点集的三角剖分(Triangulation ),对数值分析以及图形学来说,都是极为重要的一项预处理技术。
尤其是Delaunay 三角剖分,由于其独特性,关于点集的很多种几何图都和Delaunay 三角剖分相关。
Delaunay 三角剖分有两个特性:①空园特性。
Delaunay 三角网是唯一的(任意四点不能共园),在Delaunay 三角网中任一三角形的外接园内不包含其它的点。
三角网的外边界是一个凸多边形,通常称为凸壳。
如图1所示。
②最大—最小角度特性:在三角网上,两个相邻三角形构成的凸四边形中,交换四边形的对角线,六个内角的最小角不再增大(图2)。
利用Delaunay 三角网插值煤层零点线的方法研究俞小林,王小鹏(中煤航测遥感局遥感应用研究院,陕西西安710054)摘要:煤层零点线在煤田地质三维建模、编制煤层底板等高线图、等厚线图时都承担着很重要的角色。
根据Delaunay 三角网的两个特性及与人工产生零点线方法的差异,介绍了基于Delaunay 三角形面积求零点的方法。
本方法能有效克服手工确定零点连线方法产生的易出错及丢线难题,方法简单实用,易于操作,在计算机制图时可自动生成结果,快速准确。
关键词:零点线;三角网;三角形;等厚线图中图分类号:TP391文献标识码:A图1空园特性Figure 1Empty circle characters of Delaunay triangular mesh作者简介:俞小林(1965—),男,1989年毕业于浙江大学遥感地质专业,高级工程师。
基于Delaunay三角网格剖分算法在三维造型中的研究

基于Delaunay三角网格剖分算法在三维造型中的研究作者:王牌来源:《科学与财富》2014年第06期摘要:在对三维图像进行有限元数值模拟解析时,为了对连续的计算区域进行数值计算,达到模拟仿真的效果,必须先对三维图像进行网格剖分。
Delaunay三角网格剖分算法是生成网格的一种有效方法。
本文介绍了Delaunay三角网格剖分算法,以及在约束条件下的网格细分,最后给出了该算法在三维实体造型中的应用。
关键词:三角剖分;网格生成;网格细分Abstract: In the simulation analysis of the 3D finite element numerical, in order to carry out the numerical calculation for the calculation of continuous area, achieve the simulation results, we must first on the 3D mesh. Delaunay triangulation algorithm is an effective method to generate mesh. This paper introduces the Delaunay triangulation algorithm, and in the condition of mesh subdivision, finally the application of the algorithm in 3D solid modeling are given in this paper.Keywords: triangulation,mesh generation,mesh subdivision1、引言网格生成是有限元模拟计算的先决条件,有限元计算的效率和精确度在很大程度上受生成的网格质量的影响。
一种高效构建Delaunay三角网的算法

关 键词 : ea n y三角 网; 据分块 ; O D lu a 数 L P优 化 ; 不规则 三 角 网 中图分 类号 :P3 1 文献标 识码 : 文章编 号 :6 1—7 4 ( 0 0 0 T 1 A 17 17 2 1 ) 2—0 9 1 1—0 5
第 9卷 第 2期
21 0 0年 4月
江 南 大 学 学 报 (自 然 科 学 版 ) J u n l f in n nUnv ri ( au a ce c dt n o r a a g a ie s y N tr l in eE io ) oJ t S i
Vo . No 2 19 .
A i h- f c e y Al o ih fCo t u tng Dea H g Ef inc g r t m o nsr c i l una i ng a i n i y Tra ul tO
SHAN — i n , ZHENG o Xu x a g Ta , LIGe n
me h p rii n,t e tbu l ra g l t d ir g a t r so h s u e s inal tme g st e e s a tto h n i idsti n u a e r e ul rnewo k n t e e s bs t ,f ly i r e h s ting l rn t r ne b ne s q n i ly Th plti t d o h s a g rt ra u a e wo kso y o e ue ta l . e s itng meho ft i l o ihm a c e s h c n de r a e t e s a c c pe o o n sr ma ka l .Th eo mp o e a m c n t uid De a a ra ul to e r h s o fp i t e r b y e us fi r v d Gr ha s a o b l l un yti ng a i n o u bl c n r a e h ro ma c ft l o ih fs b- o k i c e s st e pe f r n e o he ag rt m.Ther s l fo x rme t h wst tt e e u to ure pe i n ss o ha h a g rt m sa ditnc up ro iy i h fi i n y o o tuc i g ir g l rnewo k l o ih ha si ts e i rt n t e efc e c fc nsr tn re u a t r . Ke wor y ds: d l u y ti n ulto e a na ra g a i n, da a e pa tton, ts t rii LOP o i zn ptmii g, ti n u a e ra g l t d
基于凸壳技术的Delaunay三角网生成算法

摘 要 该文提 出了一种针 对散 乱点集的快速构建 D lua ean y的算 法。该算 法首先对散乱 点按 有向角进行排序 , 以排序
后 的 顺 序 为 基 础 , 用凸 壳特 性 快 速将 散 乱 点 联 结 成 三 角 网 , 利 最后 利 用拓 扑 结 构 快 速 将 其 优化 为 D l ny三 角 网 。在 e ua a
p it r tr d i a geS c n l h o td p i t r d e o t a g lr me h wh c a r ae sn o v x h l on s ae so e n n l. e o d y t e s re o n s a e a d d t r n u a s i h h s c e td u i g c n e u l i t c n l g . i al t a g lr eh ooyFn l y r n ua me h s p i z d n o i s i o t mie it Dea n y ra g lt n sn tp lg c l t cu e . p o e s f lu a t n u a i u i g o oo i a sr t r sI i o u n r c s o a dn p i t t t a g lr me h, fw p i t s o l b t s o t e f l u i g h c a a tr f o v x u 1 d i g o n o r n a i u s a e ons h ud e e t r h ul f y sn t e h rc e o c n e h l .
1 引 言
Delaunay三角剖分及MATLAB实例
Delaunay三⾓剖分及MATLAB实例⼀.原理部分1.三⾓剖分与Delaunay剖分的定义如何把⼀个离散⼏何剖分成不均匀的三⾓形⽹格,这就是离散点的三⾓剖分问题,散点集的三⾓剖分,对数值分析以及图形学来说,都是极为重要的⼀项处理技术。
该问题图⽰如下:1.1 三⾓剖分定义【定义】三⾓剖分:假设V是⼆维实数域上的有限点集,边e是由点集中的点作为端点构成的封闭线段,E为e的集合。
那么该点集V的⼀个三⾓剖分T=(V,E)是⼀个平⾯图G,该平⾯图满⾜条件:1、除了端点,平⾯图中的边不包含点集中的任何点。
2、没有相交边。
//边和边没有交叉点3、平⾯图中所有的⾯都是三⾓⾯,且所有三⾓⾯的合集是散点集V的凸包。
//:⽤不严谨的话来讲,给定⼆维平⾯上的点集,凸包就是将最外层的点连接起来构成的凸多边型,它能包含点集中所有的点。
1.2 Delaunay三⾓剖分的定义在实际中运⽤的最多的三⾓剖分是Delaunay三⾓剖分,它是⼀种特殊的三⾓剖分。
先从Delaunay边说起:【定义】Delaunay边:假设E中的⼀条边e(两个端点为a,b),e若满⾜下列条件,则称之为Delaunay边:存在⼀个圆经过a,b亮点,圆内(注意是园内,圆上最多三点共圆)不含点集V中任何其他的点,这⼀特性⼜称空圆特性。
【定义】Delaunay三⾓剖分:如果点集V的⼀个三⾓剖分T只包含Delaunay边,那么该三⾓剖分称为Delaunay三⾓剖分。
1.3 Delaunay三⾓剖分的准则要满⾜Delaunay三⾓剖分的定义,必须符合两个重要的准则:1、空圆特性:Delaunay三⾓⽹是唯⼀的(任意四点不能共圆),在Delaunay三⾓形⽹中任⼀三⾓形的外接圆范围内不会有其它点存在。
如下图所⽰:2、最⼤化最⼩⾓特性:在散点集可能形成的三⾓剖分中,Delaunay三⾓剖分所形成的三⾓形的最⼩⾓最⼤。
从这个意义上讲,Delaunay三⾓⽹是“最接近于规则化的”三⾓⽹。
Delaunay三角剖分
Delauney三角网剖分算法原理:分为三步:一、凸包生成:1)求出如下四点:min(x-y)、min(x+y)、max(x-y)、max(x+y)并顺次放入一个数组,组成初始凸包;2)对于凸包上的点I,设它的后续点为J,计算矢量线段IJ右侧的所有点到IJ的距离,求出距离最大的点K;3)将K插入I,J之间,并将K赋给J;4)重复2,3步,直到点集中没有在IJ右侧的点为止;5)将J赋给I,J取其后续点,重复2,3,4步,当遍历了一次凸包后,凸包生成完成。
二、环切边界法凸包三角剖分:在凸包数组中,每次寻找一个由相邻两条凸包边组成的三角形,在该三角形的内部和边界上都不包含凸包上的任何其他点,然后去掉该点得到新的凸包链表,重复这个过程,最终对凸包数组中的点进行三角剖分成功。
三、离散的内插:1)建立三角形的外接圆,找出外接圆包含待插入点的所有三角形,构成插入区域;2)删除插入区域内的三角形公共边,形成由影响三角形顶点构成的多边形;3)将插入点与多边形所有顶点相连,构成新的Delaunay三角形;4)重复1,2,3,直到所有非凸包上的离散点都插入完为止。
功能实现流程:1. 在绘图菜单栏下添加一个子菜单项为Delauney,并且在工具栏上添加一个工具项。
设置text为Delaunay三角剖分,name为delaunay等属性,添加单击事件,并为单击事件代码2.为事件函数添加如下代码Graphics gra = panel1.CreateGraphics();List<Point_T> pts = new List<Point_T>();foreach (Geometry_T geo in choosegeos.Geofeatures){if (geo.GetType() == typeof(Point_T)){Point_T pt = (Point_T)geo;pts.Add(pt);}}List<Tin> deltins = DelauneyTin(pts);//根据多点构建delauney三角网foreach (Tin tin in deltins){Point[] ctin = new Point[3];for (int i = 0; i < 3; i++){cp = new Point((int)tin.Pthree[i].X, (int)tin.Pthree[i].Y); ctin[i] = cp;}gra.DrawPolygon(Pens.Red, ctin);}3.三角形TIN的数据结构public class Tin{Point_T[] pthree = new Point_T[3];Line_T[] lthree = new Line_T[3];public Line_T[] Lthree{get { return lthree; }set { lthree = value; }}public Point_T[] Pthree{get { return pthree; }set { pthree = value; }}public Tin(){ }public Tin(Point_T p1, Point_T p2, Point_T p3){pthree[0] = p1;pthree[1] = p2;pthree[2] = p3;lthree[0] = new Line_T(p1, p2);lthree[1] = new Line_T(p2, p3);lthree[2] = new Line_T(p3, p1);}}4.圆的数据结构public class Circle_T:Geometry_T{private Point_T cpt;public Point_T Cpt{get { return cpt; }set { cpt = value; }}double radius;public double Radius{get { return radius; }set { radius = value; }}public Circle_T(){ }public Circle_T(Point_T pt, double r){cpt = pt;radius = r;}}5.实现Delaunay三角剖分算法1)public List<Tin> DelauneyTin(List<Point_T> pts)//根据多点构建delauney三角网;分三步:构建凸包;凸包剖分;离散点内插{Graphics gra = panel1.CreateGraphics();List<Tin> deltins = new List<Tin>();List<Point_T> envpts = EnvelopeTin(pts);//构建凸包//for (int i = 0; i < envpts.Count - 1; i++)//{// gra.DrawLine(Pens.Black, new Point((int)envpts[i].X,(int)envpts[i].Y), new Point((int)envpts[i + 1].X, (int)envpts[i + 1].Y));//}//gra.DrawLine(Pens.Black, new Point((int)envpts[0].X, (int)envpts[0].Y), new Point((int)envpts[envpts.Count - 1].X, (int)envpts[envpts.Count - 1].Y));List<Point_T> dispts = new List<Point_T>();//非凸包上的离散点foreach (Point_T pt in pts){if (!envpts.Contains(pt)){dispts.Add(pt);}}List<Tin> envtins = EnvelopeDivision(envpts);//凸包剖分//foreach (Tin tin in envtins)//{// Point[] ctin = new Point[3];// for (int i = 0; i < 3; i++)// {// cp = new Point((int)tin.Pthree[i].X, (int)tin.Pthree[i].Y);// ctin[i] = cp;// }// gra.DrawPolygon(Pens.Blue, ctin);//}deltins = TinInsert(envtins, dispts);//离散点内插return deltins;}2)public List<Point_T> EnvelopeTin(List<Point_T> pts)//构建凸包{List<Point_T> envpts = new List<Point_T>();List<Point_T> othpts = new List<Point_T>();foreach (Point_T pt in pts){othpts.Add(pt);}//构建以x-y,x+y最大最小值组成的初始矩形框CompareXaddY comxandy = new CompareXaddY();CompareXsubY comxsuby = new CompareXsubY();pts.Sort(comxsuby);envpts.Add(pts[0]);envpts.Add(pts[pts.Count - 1]);othpts.Remove(pts[0]);othpts.Remove(pts[pts.Count-1]);pts.Sort(comxandy);if(!envpts.Contains(pts[0])){envpts.Insert(1, pts[0]);}if (!envpts.Contains(pts[pts.Count - 1])){envpts.Add(pts[pts.Count - 1]);}othpts.Remove(pts[0]);othpts.Remove(pts[pts.Count-1]);//构建以x-y,x+y最大最小值组成的初始矩形框int i = 0;int tag = 0;bool over = true;while(i<envpts.Count){Line_T cline;if (i==envpts.Count-1){cline = new Line_T(envpts[i], envpts[0]);}else{cline = new Line_T(envpts[i], envpts[i + 1]);}double dismax=0;for (int j = 0; j < othpts.Count ;j++ ){if (IsLeftPoint(othpts[j], cline)){double distance = PointToLine(othpts[j], cline);if (distance > dismax){dismax = distance;tag = j;over = false;}}}if (over){i++;}else{//envpts.RemoveAt(i);envpts.Insert(i+1, othpts[tag]);over = true;}}return envpts;}public List<Tin> EnvelopeDivision(List<Point_T> pts)//凸包剖分{List<Tin> envtins = new List<Tin>();List<Point_T> cpts = new List<Point_T>();foreach (Point_T pt in pts){cpts.Add(pt);}while (cpts.Count > 2){int tag = 0;double minangle = 120;for (int i = 0; i < cpts.Count; i++){double angle;if (i == 0){angle = CalcuAngle(cpts[cpts.Count - 1], cpts[i], cpts[i + 1]);}else if (i == cpts.Count - 1){angle = CalcuAngle(cpts[i-1], cpts[i], cpts[0]);}else{angle = CalcuAngle(cpts[i-1], cpts[i], cpts[i + 1]);}if ((angle - 60) < minangle){minangle = angle - 60;tag = i;}}int btag=tag-1;int atag=tag+1;if (tag == 0){btag = cpts.Count - 1;}else if (tag == cpts.Count - 1){atag = 0;}Tin ctin = new Tin(cpts[btag], cpts[tag], cpts[atag]);envtins.Add(ctin);cpts.RemoveAt(tag);}return envtins;}public List<Tin> TinInsert(List<Tin> tins, List<Point_T> pts)//离散点内插 {List<Tin> deltins = new List<Tin>();List<Tin> ctins = new List<Tin>();//临时凸包foreach (Tin tin in tins){ctins.Add(tin);}foreach (Point_T pt in pts)//对离散点遍历,内插{List<Point_T> cpts = new List<Point_T>();//临时点集foreach (Tin tin in ctins)//找到外接圆包含离散点的三角形{Circle_T ccir = DelauneyCicle(tin);//构造外接圆if (IsPointInCircle(pt, ccir))//点是否包含在圆内{//for (int i = 0; i < 3; i++)//{// if (!cpts.Contains(tin.Pthree[i]))// {// cpts.Add(tin.Pthree[i]);//记录当前点// }//}deltins.Add(tin); //记录保存当前三角形}}//List<Point_T> ecpts = EnvelopeTin(cpts);//求点集(外接圆包含离散的三角形)的凸包?,接下来,插入点,构建新三角网//for (int j = 0; j < ecpts.Count;j++ )//{// Tin tin;// if (j == ecpts.Count-1)// {// tin = new Tin(ecpts[j], ecpts[0], pt);// }// else// {// tin=new Tin(ecpts[j],ecpts[j+1],pt);// }// ctins.Add(tin);//}List<Line_T> eli = BorderTin(deltins);foreach (Line_T line in eli){Tin tin = new Tin(line.Frompt, line.Topt, pt);ctins.Add(tin);}foreach (Tin tin in deltins)//改变临时三角网(删除deltins保存的三角网){ctins.Remove(tin);}deltins.Clear();}return ctins;}3)public bool IsLeftPoint(Point_T pt, Line_T line)//点在线的左边;叉积大于{bool yes = false;if ((pt.X - line.Frompt.X) * line.ParaA + (pt.Y - line.Frompt.Y) * line.ParaB > 0){yes = true;}return yes;}public double CalcuAngle(Point_T fp, Point_T mp, Point_T tp)//首,中,尾三点构成的夹角{double angle = 0;Point_T vector1 = new Point_T(fp.X - mp.X, fp.Y - mp.Y);Point_T vector2 = new Point_T(tp.X - mp.X, tp.Y - mp.Y);angle = Math.Acos((vector1.X * vector2.X + vector1.Y * vector2.Y) /(Math.Sqrt(vector1.X * vector1.X + vector1.Y * vector1.Y) *Math.Sqrt(vector2.X * vector2.X + vector2.Y * vector2.Y)));return angle;}public Circle_T DelauneyCicle(Tin tin)//构建三角形的外接圆{double x1 = tin.Pthree[0].X;double x2 = tin.Pthree[1].X;double x3 = tin.Pthree[2].X;double y1 = tin.Pthree[0].Y;double y2 = tin.Pthree[1].Y;double y3 = tin.Pthree[2].Y;double x = ((y2 - y1) * (y3 * y3 - y1 * y1 + x3 * x3 - x1 * x1) - (y3 - y1) * (y2 * y2 - y1 * y1 + x2 * x2 - x1 * x1))/ (2 * (x3 - x1) * (y2 - y1) - 2 * ((x2 - x1) * (y3 - y1)));double y = ((x2 - x1) * (x3 * x3 - x1 * x1 + y3 * y3 - y1 * y1) - (x3 - x1) * (x2 * x2 - x1 * x1 + y2 * y2 - y1 * y1))/ (2 * (y3 - y1) * (x2 - x1) - 2 * ((y2 - y1) * (x3 - x1)));Point_T cpt = new Point_T(x, y);double radius=Math.Sqrt(Math.Pow((x1-x),2)+Math.Pow((y1-y),2));Circle_T cir = new Circle_T(cpt,radius);return cir;}public bool IsPointInCircle(Point_T pt, Circle_T cir){if(Math.Sqrt(Math.Pow((pt.X-cir.Cpt.X),2)+Math.Pow((pt.Y-cir.Cpt.Y),2))<cir.Radius) {return true;}elsereturn false;}public List<Line_T> BorderTin(List<Tin> tins){List<Line_T> borli = new List<Line_T>();for (int i = 0; i < tins.Count; i++){for (int t = 0; t < 3; t++){bool tag = false;Line_T cl = tins[i].Lthree[t];for (int j = 0; j < tins.Count; j++){if (j!=i&&IsContainByTin(cl, tins[j])){tag = true;}}if (!tag)borli.Add(cl);}}return borli;}public bool IsContainByTin(Line_T li, Tin tin){for (int i = 0; i < 3; i++){if ((li.Frompt == tin.Lthree[i].Frompt || li.Frompt ==tin.Lthree[i].Topt) && (li.Topt == tin.Lthree[i].Topt || li.Topt ==tin.Lthree[i].Frompt)){return true;}}return false;}6.实现两个排序类CompareXsubY(x-y排序)和CompareXaddY(x+y 排序),仿照CompareX写功能操作步骤:先在面板上绘制多个点;框选部分点;按下实现Delaunay三角网剖分工具,Delaunay三角网剖分成功。
基于Delaunay三角剖分的二维交互建模研究
第43卷第2期物探化探计算技术Vol.43No.2 2021年3月COMPUTING TECHNIQUES FOR GEOPHYSIC A L AND GEOCHEMIC A L EXPLORATION Mar.2021文章编号:1001-1749(2021)02-025605基于Delaunay三角剖分的二维交互建模研究杨强(中国石化石油物探技术研究院,南京211103)摘要:准确合理的地质模型是地震正演模拟的基础。
简单的层状结构建模方法无法描述复杂的地质模型的拓扑结构,基于块体的地质建模方法可以描述断层、尖灭、透镜体等多种复杂地质结构,但建模方法实现比较难。
这里提出了一种解决方案,该方法基于Delaunay的地质建模方法,采用带约束的Delaunay三角剖分对复杂模型三角化,在此基础上,以原始线段为索引对剖分结果进行递归查找,形成多边形拓扑结构图和封闭多边形组,再对封闭多边形进行网格化。
通过理论和实际模型,验证了本方法的可行性。
关键词:地震正演;建模;Delaunay三角剖分中图分类号:TP391.41文献标志码:A 0引言地震勘探中,正演模拟不但在地震数据采集中得到应用,在地震资料处理和地震资料解释中也是重要的验证技术手段,是进行地震反演的基础。
而正演模拟的基础就是需要准确且合理的地质模型,因此建模是地震正演的重要基础。
传统上地质模型都沿用Cenveny提出的模型结构,即所谓层状结构模型。
它要求每一个分界面都必须从模型体的左边界贯穿到模型体的右边界,分界面按顺序由上到下依序排列,不得交叉。
对于逆断层、尖灭、透镜体等复杂地层情况,只能人为地简化模型,从而满足层状模型。
在实际的地球物理勘探中,层状结构模型有两个严重不足:①在采集、处理、解释各阶段的模型大都有逆断层、尖灭、透镜体等复杂地质元素,层状结DOI:10.3969/j.issn.1001-1749.2021.02.16构模型无法准确描述复杂的地质拓扑结构,从而无法得到网格化模型;②处理中的叠前深度偏移速度建模以及地震解释构造建模等,都要求能够交互修改模型,交互编辑中的层位修改及移动必须遵循层状规则,这对交互式复杂建模而言很困难,也不便利。
一种改进的约束Delaunay三角网构建算法及其在快速立体解译平台中的应用
遥感信 息
一
种改进的约束 Dea n y三 角网构建算法及其 lu a 在快速立体解译平 台中的应 用
孙晓峰 , 李英成 , 王淼 , 谭讶 , 刘沛
( 国测 绘 科 学研 究 院 中测 新 图 ( 京 ) 感 技 术 有 限责 任 公 司 , 京 1 0 3 ) 中 北 遥 北 0 0 9
d i1 . 9 9 jis . O 0 1 7 2 1 . 1 0 3 o : 0 3 6 /.sn 1 O —3 7 . 0 2 0 . 0
中图分类号 : TP7 9
文献标识码 : A
文 章 编 号 :0 0 3 7 ( 02 19 0 9 4 1 0 — 1 7 2 1 ) 1 —0 网在 土 方 量 估 算 、 约 e ny三 a 三维 表 达 、 形 拟 合 等 方 面 得 到 了广 泛 的 应用 。 本 文 对 传 统 的 无 地
约 束 三 角 网生 长 法 进 行 了扩 展 , 扩 展 后 的算 法 可 以 同 时 满 足 外部 边 界 约 束 及 其 内部 多 线 串约 束 。 通 过 对 构 网 使
f r n e i o u a u e n a e n “ n t n t r o I t r r t to l to m ”wi h s ag rt m. o ma c n v l me me s r me tb s d o An I sa tS e e n e p e a i n P a f r t t i lo i h h Ke o d : lu a ra g lto t in l— x a d n t o r s rc i n; o u e e au t n y w r s Dea n y ti n u a i n;ra g e e p n i g me h d; e t it o v lm v l a i o
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
m eh d t id t etin l t h e r hn o n s1c td t i t o a u h hg e x c t g ef— t o o f h ra g ewi t es a c ig p it o ae 。h sme h d h sm c i h re e u i fi n h n
法, 实践 证 明 , 其效 率要 优于 格 网化 逐点 插入 法 。 l 数 据 结 构
提 出 了分 治 算 法 , a o L wsn提 出 了 逐 点 插 入 法 ,
Gre en和 Sb o isn提 出了 三角 网生 长法 ; 内许 多 学 国
S  ̄a h a g0 0 3 , hn ;3 He e G o t s e tr S ia h a g0 0 3 , hn ) h i u n 5 0 1 C ia . b i e ma i n e , h i u n 5 0 1 C ia z cC jz
Ab ta tA e efce tDea n ytin ua e ewo k c n tu t nm eh di to u e sn c e e — sr c : n w fiin lu a ra g lt dn t r o s r c i t o i r d c d u ig i r m n o sn n
(. 林 市测 绘 研 究 院 , 西 桂 林 5 1 0 ; . 河 北省 第三 测绘 院 , 北 石 家庄 0 0 3 ; . 北 省 基 础 地 理 信 息 中心 , 北 1桂 广 402 2 河 50 1 3 河 河
石 家庄 0 0 3 ) 5 0 1
摘
要: 利用计算机 技 术 , 于 实 际测 量数 据 , 用 逐 点插 入法 , 基 利 在不 建 立格 网索 引 的情 况 下 , 出一 种高 效 的 提
外 接 圆两大 重要 性质 , 剖分 所 得 每 个 三 角形 最 大 使
限 度地 接近 正三 角形 , 因此 它在 所 有 的构 网原 则 中 是 最优 的 , 使得 它作 为一 种基 本手段 在 地学分 析 、 这
地理 信息 系 统 、 拟 现 实 以及 道 路 设 计 等领 域 有 着 虚
占用 内存 资源少 , 程容易 实现 , 编 传统 算法 时 间复杂 度差 , 主要 制约 因素 在 于 点在 三 角 网 中的查 找和 判 断 以及 三 角 网的局 部优 化 。文 献 [] 出通 过 对 原 1提
始数据 预处 理并进 行 格 网化 管 理 , 理论 和实 践 均 从 证 明这 是一 种有效 的提高逐 点插 人法 构 网速 度 的方 法, 已被 广泛 采用 ; 由于此 方法需 要 对原 始数据 进 但
Di c s i n o y t c no o y o h l u a r a g l t d ne wo k s u so n ke e h l g f t e De a n y t i n u a e t r
L a — i IXio qu ,XU i- in ,YI Zh— o g M n xa 。 N i n 。 y
t li s r i g me h d b s d o e ls r e a a wi o t s ti g u rd i d x Co p rn t rd i d x a n e t t o a e n r a u v y d t t u e t p g i n e . n h n m a i g wi g i n e h
广泛 的应 用 。
经过 2 0多年 的研 究 , 内外 已经 出现 了不 少成 国 熟 的 D lu a ea n y三角 网生成 算法 , e s R bn o L wi和 o isn
行 排序 和对 构 网过 程 中 的三 角 形进 行 格 网管 理 , 工 作 量较 大 , 据结 构复 杂 , 加 了编程 的难度 。笔 者 数 增 通 过对 逐点插 入法 深 入 剖 析 , 出了一 种 实 用 的方 提
第 2 第 6期 O卷 21 0 1年 1 2月
测. O № . 12 6
De .。 01 c 2 1
ENGI NEERI NG URV E NG oF S YI AND APP NG M I
Dea n y三 角 网关 键 技 术 探 讨 lu a
李 小秋 许 民 献 尹 志永 。 , ,
De u a l ny三角 网构建方法 , a 与建立格 网索引法搜索点所在的三角形相 比, 具有较 高的执行效 率。 关键 词 : ean y 不规则三角 网; N; D lu a ; TI 数据结构
中 图分 类 号 : 2 8 P 0 文献标志码 : A 文 章 编 号 :0 67 4 (0 10 —0 10 1 0 —99 2 1 )60 6 —3
( . i n I s i t f S r e i g a d M a p n Gu l 4 0 2 Ch n ;2 1 Gu l n tt e o u v yn n p i g, i n 5 1 0 , i a .He e t e Th r r a f S r e ig a d M a p n , i u i b i h id Bu e u o u v y n n p i g
c e y inc .
Ke r s Dea n y;r e u a ra g e n t r TI ; a a s r c u e y wo d : l u a ir g lr t i n l e wo k; N d t t u t r
由于 D lu a ea n y三 角 网具 有 最 大 的最 小 角 及 空