判断一个点是否在多边形内C#

本文介绍了一种算法,用于判断一个点是否位于给定线段的一侧及是否在一个由多边形顶点定义的区域内。通过计算点与线段形成的向量交叉乘积来确定位置关系。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//判断点在线的一边
public int isLeft(Vector2 P0, Vector2 P1, Vector2 P2)
{
   int abc = (int)((P1.X - P0.X) * (P2.Y - P0.Y) - (P2.X - P0.X) * (P1.Y - P0.Y));
   return abc;

} 

 

//判断点pnt是否在region内主程序
private bool isInRegion(Vector2 pnt , List<Vector2> region)
{

            int wn = 0, j = 0; //wn 计数器 j第二个点指针
            for (int i = 0; i < region.Count; i++)
            {
                //开始循环
                if (i == region.Count - 1)
                {
                    j = 0;//如果 循环到最后一点 第二个指针指向第一点
                }
                else
                {
                    j = j + 1; //如果不是 ,则找下一点
                }

                if (region[i].Y <= pnt.Y) // 如果多边形的点 小于等于 选定点的 Y 坐标
                {
                    if (region[j].Y > pnt.Y) // 如果多边形的下一点 大于于 选定点的 Y 坐标
                    {
                        if (isLeft(region[i], region[j], pnt) > 0)
                        {
                            wn++;
                        }
                    }
                }
                else
                {
                    if (region[j].Y <= pnt.Y)
                    {
                        if (isLeft(region[i], region[j], pnt) < 0)
                        {
                            wn--;
                        }
                    }
                }
            }
            if (wn == 0)
            {
                return false;
            }
            else
            {
                return true;
            }
}


 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值