欢迎来到天天文库
浏览记录
ID:20352671
大小:66.00 KB
页数:6页
时间:2018-10-09
《空间数据分析算法》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、实验七空间数据分析算法实验目的:1.理解空间数据分析算法原理2.掌握缓冲区分析算法和最短路径算法3.实现线的缓冲区边界生成算法实验环境:pc电脑一台,.NET2005开发环境实验内容:线的缓冲区边界生成,其算法原理是对拐角出作角的角平分线,然后对每段线以缓冲距作平行线,具体处理过程如下:1)首尾点额外处理:推求过该点的并且垂直于相连直线段的垂线,求出到该点相距为缓冲距大小的两点2)中间点重复处理:推求前一线段的平行线;推求相邻两线夹角的平分线;求两线的交点3)构建整个缓冲区多边形边界:将所求的所有点按一个方向串联起来
2、,构建一个多边形实验过程:线的缓冲区边界生成1)在编辑菜单栏下添加一个子菜单项为缓冲区,添加单击事件(参考代码如下)Graphicsgra=panel1.CreateGraphics();BufferFormbform=newBufferForm();bform.ShowDialog();doubledistance=bform.value;Listring=newList();foreach(Geometry_Tgeoinchoosegeos.Geofeatures){if(ge
3、o.GetType()==typeof(Path_T)){Path_Tpa=(Path_T)geo;ring=BufferofPath(path,distance);}}intn=ring.Count-1;for(inti=0;i4、ed,newPoint((int)ring[n].X,(int)ring[n].Y),newPoint((int)ring[0].X,(int)ring[0].Y));2)添加一个新的窗体,其目的是为了输入缓冲距,窗体设计如下:设计可仿照前面几个实验的窗体设计3)添加一个矢量线的数据结构,为了处理上下两条平行线,左右两个点(参考代码如下)publicclassVectorLine{doubleparaA;publicdoubleParaA{get{returnparaA;}set{paraA=value;}}doub5、leparaB;publicdoubleParaB{get{returnparaB;}set{paraB=value;}}doubleparaC;publicdoubleParaC{get{returnparaC;}set{paraC=value;}}publicVectorLine(){}publicVectorLine(Point_Tfp,Point_Ttp){paraA=fp.Y-tp.Y;paraB=tp.X-fp.X;paraC=fp.X*tp.Y-fp.Y*tp.X;}publicVectorLine(d6、oublepa,doublepb,doublepc){paraA=pa;paraB=pb;paraC=pc;}}4)实现线的缓冲区算法(参考代码如下)publicListBufferofPath(Path_Tpa,doubledistance){Listring=newList();Listlpath=newList();Listrpath=newList();Point_Tlfpt=newP7、oint_T();Point_Trfpt=newPoint_T();TwoParallelPoint(pa.Path[0],pa.Fpoint,distance,lfpt,rfpt);lpath.Add(lfpt);rpath.Add(rfpt);intn=pa.Path.Count-1;for(inti=0;i8、th[i+1].Frompt,pa.Path[i+1].Topt);VectorLinecvl=AngleBisector(fvl,svl);VectorLinelvl=newVectorLine();VectorLinervl=newVectorLine();;TwoParallelLine(fvl,distance,lvl,rvl);Poi
4、ed,newPoint((int)ring[n].X,(int)ring[n].Y),newPoint((int)ring[0].X,(int)ring[0].Y));2)添加一个新的窗体,其目的是为了输入缓冲距,窗体设计如下:设计可仿照前面几个实验的窗体设计3)添加一个矢量线的数据结构,为了处理上下两条平行线,左右两个点(参考代码如下)publicclassVectorLine{doubleparaA;publicdoubleParaA{get{returnparaA;}set{paraA=value;}}doub
5、leparaB;publicdoubleParaB{get{returnparaB;}set{paraB=value;}}doubleparaC;publicdoubleParaC{get{returnparaC;}set{paraC=value;}}publicVectorLine(){}publicVectorLine(Point_Tfp,Point_Ttp){paraA=fp.Y-tp.Y;paraB=tp.X-fp.X;paraC=fp.X*tp.Y-fp.Y*tp.X;}publicVectorLine(d
6、oublepa,doublepb,doublepc){paraA=pa;paraB=pb;paraC=pc;}}4)实现线的缓冲区算法(参考代码如下)publicListBufferofPath(Path_Tpa,doubledistance){Listring=newList();Listlpath=newList();Listrpath=newList();Point_Tlfpt=newP
7、oint_T();Point_Trfpt=newPoint_T();TwoParallelPoint(pa.Path[0],pa.Fpoint,distance,lfpt,rfpt);lpath.Add(lfpt);rpath.Add(rfpt);intn=pa.Path.Count-1;for(inti=0;i8、th[i+1].Frompt,pa.Path[i+1].Topt);VectorLinecvl=AngleBisector(fvl,svl);VectorLinelvl=newVectorLine();VectorLinervl=newVectorLine();;TwoParallelLine(fvl,distance,lvl,rvl);Poi
8、th[i+1].Frompt,pa.Path[i+1].Topt);VectorLinecvl=AngleBisector(fvl,svl);VectorLinelvl=newVectorLine();VectorLinervl=newVectorLine();;TwoParallelLine(fvl,distance,lvl,rvl);Poi
此文档下载收益归作者所有