欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程语言 > C# >内容正文

C#

c#实现 改进弧长法判断点在多边形里面

发布时间:2025/4/16 C# 55 豆豆
生活随笔 收集整理的这篇文章主要介绍了 c#实现 改进弧长法判断点在多边形里面 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

一、开发环境:

    VS2017,C# winform窗口程序

二、不同点

     和网上的介绍不同,我也 不清楚是为什么,我去实现别的博客的思路,始终是在象限相差为2的地方会判断不正确,所以我自己思考了一种方法来进行这个地方的处理。

三、算法思路解释

1、为了介绍方便,先规定符号:

   将需要判断的点叫做:centerPoint

   多边形的顶点序列是:points[n]

   第i个点为:points[i]

   points[n]对centerPoint的相对位置,也就是将坐标原点放在centerPoints后,每个points[i]的位置变为relativePoints[i]

   同时最后一个点和第一个点相同:即points[n]=points[0]

2、介绍:

   1)、我们知道圆的弧长都是,如果centerPoints在一个多边形里面,那么将多边形按顶点顺序映射到centerPoint的弧长必定等于,如果centerPoint在多边形的外面,那么中心投影的弧长为0。(当然,这个弧长是规定了方向的,方向相反会抵消投影的弧长)

  2)、于是就这样进行编程:

        从relativePoints[0]出发,

        当relativePoints[i+1]比relativePoints[i]象限相同的时候,弧长保持不变

        当relativePoints[i+1]比relativePoints[i]象限增加1的时候,弧长加上

        当relativePoints[i+1]比relativePoints[i]象限减少1的时候,弧长减去

        当relativePoints[i+1]比relativePoints[i]象限增加2或则减少2的时候,弧长增加或者减少,如何增减,第三部分细讲;

   3)当所有顶点都遍历完之后,如果总的弧长=或者,说明centerPoint在多边形里面,总的弧长=0,说明centerPoint在多边形外面。

三、在relativePoints[i+1]比relativePoints[i]的象限相差2详解

  1、思路:

    对于p(x0,y0)判断它在直线L:ax+by+c=0(a必须大于0)的左侧还是右侧,我们知道如果

        ax0+by0+c>0(a>0),点p在直线L的右侧;

        ax0+by0+c=0  (a>0),点p在直线L上

        ax0+by0+c<0  (a>0),点p在直线L左侧。

如下图:

2、应用:

      

      分为以下四种情况,

      1)当relativePoints[i+1]=(x2,y2)在第一象限,relativePoints[i]=(x1,y1)在第三象限的时候:

    那么直线为:  (y2-y1>0)

    对于点屏幕上任意一点P(x0,y0):

     f>0:        总弧长加上

     f=0:         P(x0,y0)在多边形边上

     f<0:         总弧长减去

 

      2)当relativePoints[i+1]=(x2,y2)在第三象限,relativePoints[i]=(x1,y1)在第一象限的时候:

    那么直线为:(y1-y2>0)

    对于点屏幕上任意一点P(x0,y0):

     f>0:        总弧长减去

     f=0:         P(x0,y0)在多边形边上

     f<0:         总弧长加上

3)当relativePoints[i+1]=(x2,y2)在第二象限,relativePoints[i]=(x1,y1)在第四象限的时候:

    那么直线为:  (y2-y1>0)

    对于点屏幕上任意一点P(x0,y0):

     f>0:        总弧长减去

     f=0:         P(x0,y0)在多边形边上

     f<0:         总弧长加上

  4)当relativePoints[i+1]=(x2,y2)在第四象限,relativePoints[i]=(x1,y1)在第二象限的时候:

    那么直线为:(y1-y2>0)

    对于点屏幕上任意一点P(x0,y0):

     f>0:        总弧长加上

     f=0:         P(x0,y0)在多边形边上

     f<0:         总弧长减去

 

等几天再给出代码

 

    

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

总结

以上是生活随笔为你收集整理的c#实现 改进弧长法判断点在多边形里面的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。