主题:谁能来帮帮我啊!
谁能帮我看看这个怎么才能实现啊,愁死了!
三角网生长算法步骤:(过程如图2)
在所采集的离散点中任意找一点,然后查找距此点最近的点,连接后作为初始基线。
在初始基线右侧运用Delaunay法则搜寻第三点,具体的做法是:在初始基线右侧的离散点中查找距此基线距离最短的点,做为第三点。
生成Delaunay三角形,再以三角形的两条新边(从基线起始点到第三点以及第三点到基线终止点)作为新的基线。
重复步骤(2),(3)直至所有的基线处理完毕。
也有人称此算法为“炸弹法”。
图1 delaunay三角形与Voronoi多边形偶图 图2 三角网生长算法过程
在VB环境中的数据结构
为了对离散数据进行有效管理,作者在构建TIN时采用的数据结构为点结构,边(或线)结构,三角形(或面)结构。数据结构定义如下(图3是对应于图4的不规则三角网的表示方法[6]):
(1)类模块
a.三角形数据结构
Triangle(Triangle.cls)
Public pnt1 As New POINT ‘三顶点
Public pnt2 As New POINT
Public pnt3 As New POINT
Public NO As Long ‘三角形编号
Public triNO1, triNO2, triNO3 As Long ‘三角形的相邻三角形号
Public EdgeNO1, EdgeNO2, EdgeNO3As Long ‘三角形的三条边号
b.点的数据结构
Point(Point.cls)
Public x As Double
Public y As Double
Public z As Double
Public pntNO As Long ‘顶点编号
c.边的数据结构
Edge(Edge.cls)
Public eS As Point ‘边的起点
Public eE As Point ‘边的终点
Public LTriNO As Long ‘边的左三角形编号
Public RTriNO As Long ‘边的左三角形编号
(2) 模块
三角形数组和点数组,三角形记数和点记数
Modulel(Modulel.bas)
Public triArray As New Collection ‘三角形集合
Public pntArray As New Collection ‘点的集合
Public edgeArray As New Collection ‘边的集合
Public nCount As Long ‘点个数
Public eCount As Long ‘边个数
Public triCount As Long ‘三角形个数
存放窗体函数中的调用函数
mathCal(mathCal.bas)
Function TwoPntDistance(ByVal p1 As POINT, ByVal p2 As POINT) As Double ‘计算两点之间的距离
Function MinDistancePnt(ByVal p As POINT) As POINT ‘找与已知点最短距离的点
Function MaxAnglePnt(ByVal e as Edge) As POINT ‘找距与已知的基线两端点组成夹角最大的点
三角网生长算法步骤:(过程如图2)
在所采集的离散点中任意找一点,然后查找距此点最近的点,连接后作为初始基线。
在初始基线右侧运用Delaunay法则搜寻第三点,具体的做法是:在初始基线右侧的离散点中查找距此基线距离最短的点,做为第三点。
生成Delaunay三角形,再以三角形的两条新边(从基线起始点到第三点以及第三点到基线终止点)作为新的基线。
重复步骤(2),(3)直至所有的基线处理完毕。
也有人称此算法为“炸弹法”。
图1 delaunay三角形与Voronoi多边形偶图 图2 三角网生长算法过程
在VB环境中的数据结构
为了对离散数据进行有效管理,作者在构建TIN时采用的数据结构为点结构,边(或线)结构,三角形(或面)结构。数据结构定义如下(图3是对应于图4的不规则三角网的表示方法[6]):
(1)类模块
a.三角形数据结构
Triangle(Triangle.cls)
Public pnt1 As New POINT ‘三顶点
Public pnt2 As New POINT
Public pnt3 As New POINT
Public NO As Long ‘三角形编号
Public triNO1, triNO2, triNO3 As Long ‘三角形的相邻三角形号
Public EdgeNO1, EdgeNO2, EdgeNO3As Long ‘三角形的三条边号
b.点的数据结构
Point(Point.cls)
Public x As Double
Public y As Double
Public z As Double
Public pntNO As Long ‘顶点编号
c.边的数据结构
Edge(Edge.cls)
Public eS As Point ‘边的起点
Public eE As Point ‘边的终点
Public LTriNO As Long ‘边的左三角形编号
Public RTriNO As Long ‘边的左三角形编号
(2) 模块
三角形数组和点数组,三角形记数和点记数
Modulel(Modulel.bas)
Public triArray As New Collection ‘三角形集合
Public pntArray As New Collection ‘点的集合
Public edgeArray As New Collection ‘边的集合
Public nCount As Long ‘点个数
Public eCount As Long ‘边个数
Public triCount As Long ‘三角形个数
存放窗体函数中的调用函数
mathCal(mathCal.bas)
Function TwoPntDistance(ByVal p1 As POINT, ByVal p2 As POINT) As Double ‘计算两点之间的距离
Function MinDistancePnt(ByVal p As POINT) As POINT ‘找与已知点最短距离的点
Function MaxAnglePnt(ByVal e as Edge) As POINT ‘找距与已知的基线两端点组成夹角最大的点