地理信息系统算法基础上机题目Word文档格式.docx
- 文档编号:13013798
- 上传时间:2022-10-02
- 格式:DOCX
- 页数:6
- 大小:15.39KB
地理信息系统算法基础上机题目Word文档格式.docx
《地理信息系统算法基础上机题目Word文档格式.docx》由会员分享,可在线阅读,更多相关《地理信息系统算法基础上机题目Word文档格式.docx(6页珍藏版)》请在冰豆网上搜索。
Y=(float)(pt2.Y+(pt2.Y-pt1.Y)*dis/L);
returnnewPointF(X,Y);
}
else
X=(float)(pt1.X+(pt1.X-pt2.X)*dis/L);
Y=(float)(pt1.Y+(pt1.Y-pt2.Y)*dis/L);
2、判断两线段是否相交
publicstaticboolIsIntersected(SimpleLineL1,SimpleLineL2)
{
//获取两条线段的端点
PointP1=L1.Nodes[0];
PointP2=L1.Nodes[1];
PointQ1=L2.Nodes[0];
PointQ2=L2.Nodes[1];
//求向量P1Q1,P2Q1,Q2Q1
PointP1Q1=newPoint(P1.X-Q1.X,P1.Y-Q1.Y);
PointP2Q1=newPoint(P2.X-Q1.X,P2.Y-Q1.Y);
PointQ2Q1=newPoint(Q2.X-Q1.X,Q2.Y-Q1.Y);
//判断线段P1P2是否跨立线段Q1Q2,当点P1和P2在线段两侧时,则线段P1P2
跨立线段Q1Q2。
if(((P1Q1.X*Q2Q1.Y-Q2Q1.X*P1Q1.Y)>
=0)&
&
((P2Q1.X*Q2Q1.Y-Q2Q1.X
*P2Q1.Y)<
=0))
returntrue;
elseif(((P1Q1.X*Q2Q1.Y-Q2Q1.X*P1Q1.Y)<
((P2Q1.X*Q2Q1.Y
-Q2Q1.X*P2Q1.Y)>
returnfalse;
3、多边形重心计算
staticpublicPointFCenterOfPolygon(SimplePolygonpolygon)
PointP1=polygon.Nodes[0];
//取出第一点作为所有三角形的公共顶点
PointP2;
//P2和P3用于存储三角形的其他两个顶点
PointP3;
List<
PointF>
tempPointList=newList<
();
//存储所有三角形的重(中)
心
doubleareaOfPolygon=0;
//多边形的面积
doubleX=0;
//X、Y:
多边形的重(中)心
doubleY=0;
//计算所有三角形的重(中)心,存储在tempPointList中
for(inti=1;
i<
polygon.numOfNodes()-1;
i++)
P2=polygon.Nodes[i];
P3=polygon.Nodes[i+1];
tempPointList.Add(newPointF((P1.X+P2.X+P3.X)/3f,(P1.Y+P2.Y+
P3.Y)/3f));
//计算多边形的面积:
所有三角形的面积之和
i++)
areaOfPolygon+=Math.Abs(Vector.VecCross(P1,P2,P3));
//将三角形的重(中)心加权平均求得多边形的重(中)心
//各个三角形重(中)心的权重即是三角形的面积所占多边形面积的比例
X+=tempPointList[i-1].X*Math.Abs(Vector.VecCross(P1,P2,P3))/
areaOfPolygon;
Y+=tempPointList[i-1].Y*Math.Abs(Vector.VecCross(P1,P2,P3))/
PointFtempPoint=newPointF((float)X,(float)Y);
returntempPoint;
4、编程实现八方向矢量线栅格化
提示:
栅格单元的宽度和长度为10个像素,点的坐标信息都是工作区坐标信息
privatevoidEightdirRasterized(Pointp1,Pointp2)
//线段的斜率
floatb=((float)((p2.Y-p1.Y)))/(p2.X-p1.X);
floatb1=((float)((p2.X-p1.X)))/(p2.Y-p1.Y);
//求出这两个端点位置的列数差和行数差
intdeltaX=Math.Abs(p2.X-p1.X),deltaY=Math.Abs(p2.Y-p1.Y);
//若列数差大于行数差,则逐列求出本列中心线与过这两个端点的直线的交点
if(deltaX>
deltaY)
for(floatcol=p1.X+1.5f,row;
col<
p2.X;
col++)
row=(col-p1.X)*b+p1.Y;
collectofpoint.Add(newPoint((Int32)Math.Truncate(col),
(Int32)Math.Truncate(row)));
else//若列数差小于行数差,则逐行求出本行中心线与过这两个端点的直线的交
点
for(floatrow=p1.Y+1.5f,col;
row<
p2.Y;
row++)
col=(row-p1.Y)*b1+p1.X;
5、编程实现全路径矢量线栅格化
privatevoidFullPathRasterized(PointFp1,PointFp2)
floata=(p2.Y-p1.Y)/(p2.X-p1.X);
//计算矢量倾角的正切
floatdeltaX=Math.Abs(p2.X-p1.X),deltaY=Math.Abs(p2.Y-p1.Y);
//计
算行数差和列数差
floatstartCol,endCol=0;
=deltaY)
for(inti=((int)p1.Y)/10;
=((int)p2.Y)/10;
if(i==((int)p1.Y)/10)
startCol=((i*10-p1.Y)/a+p1.X)/10;
startCol=endCol;
endCol=(((i+1)*10-p1.Y)/a+p1.X)/10;
if(i==((int)p1.Y)/10&
startCol<
((int)p1.X)/10)
startCol=((int)p1.X)/10;
if(i==((int)p2.Y)/10&
endCol>
((int)p2.X)/10)
endCol=((int)p2.X)/10;
while(startCol<
=endCol)
resultOfFullPathRasterized.Add(new
PointF((int)Math.Truncate(startCol),i));
startCol++;
6、编程实现间隔取点法达到矢量数据的压缩
staticpublicSimpleLineCompressByInterval(SimpleLineline,intInterval)
SimpleLinenewSimpleLine=newSimpleLine();
inti=0;
if(Interval>
=line.Nodes.Count()-2)
MessageBox.Show("
间隔点数值Interval太大,将返回原始线要素"
);
returnline;
while(i<
line.Nodes.Count()-1)
newSimpleLine.Add(line.Nodes[i]);
i+=(Interval+1);
newSimpleLine.Add(line.Nodes.Last());
//保留末点
returnnewSimpleLine;
7、求点P(x,y)到线段l的最短距离
publicstaticfloatGetDistancePointToSegment(PointP,PointP0,PointP1)
PointP0
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 地理信息系统 算法 基础 上机 题目