C#中如何判断一条线是否与多边形相交?我有一个非常相似的问题:HowtoknowifalineintersectsaplaneinC#?我正在寻找一种方法(在C#中)来判断一条线是否与任何多边形相交。我认为ChrisMarasti-Georg的算法非常有用,但它缺少最重要的方法,即线到线交叉。有谁知道完成ChrisMarasti-Georg代码的跨线方法或者是否有类似的方法?在C#中是否有内置代码?此方法适用于使用禁区功能增强的Bing地图算法。生成的路径不得通过禁区(自由多边形)。.NET框架中没有用于边缘检测的内置代码。这是执行您想要的操作的代码(移植到C#)(实际算法可以在Google组的comp.graphics.algorithms中找到):publicstaticPointFFindLineIntersection(PointFstart1,PointFend1,PointFstart2,PointFend2){floatdenom=((end1.X-start1.X)*(end2.Y-start2.Y))-((end1.Y-start1.Y)*(end2.X-start2.X));//AB&CD平行if(denom==0)returnPointF.Empty;浮点数=((start1.Y-start2.Y)*(end2.X-start2.X))-((start1.X-start2.X)*(end2.Y-start2.Y));floatr=数字/面额;floatnumer2=((start1.Y-start2.Y)*(end1.X-start1.X))-((start1.X-start2.X)*(end1.Y-start1.Y));浮动s=numer2/denom;如果((r1)||(s1))返回PointF.Empty;//求交点PointFresult=newPointF();结果.X=start1.X+(r*(end1.X-start1.X));结果.Y=start1.Y+(r*(end1.Y-start1.Y));返回结果;}有点跑题,但是如果线是无限的,我认为有一个更简单的解决方案:如果所有点都在线的同一侧,则线将不会穿过多边形。在这两个的帮助下:我得到了这个小宝石:varside=GetSide(lineP1,lineP2,region.First());返回侧==0?false:region.All(x=>GetSide(lineP1,lineP2,x)==side);}publicstaticintGetSide(PointlineP1,PointlineP2,PointqueryP){returnMath.Sign((lineP2.X-lineP1.X)*(queryP.Y-lineP1.Y)-(lineP2.Y-lineP1.Y)*(queryP.X-lineP1.X));}}为了检测silverlight地图项目中多边形之间的碰撞,我们使用了clipper库:免费用于商业用途,体积小,性能好,易于使用。Clippers网页这篇文章看起来很有帮助http://www.codeproject.com/KB/recipes/2dpolyclip.aspx此代码是一种2D多边形裁剪算法,可精确定位线与多边形边界相交的位置。此代码适用于完全任意形状的凹凸多边形,并且能够处理任何线方向。以上是C#学习教程:C#中如何判断直线是否与多边形相交?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
