首页 >后端开发 >C++ >如何在 C# 中确定点是否位于多边形内?

如何在 C# 中确定点是否位于多边形内?

Mary-Kate Olsen
Mary-Kate Olsen原创
2025-01-04 09:56:39737浏览

How to Determine if a Point Lies Within a Polygon in C#?

多边形中的 C# 点:确定点是否位于多边形内

考虑您想要确定多边形内是否存在点的场景多边形的边界。要使用 WinForms 在 C# 中完成此任务,请按照下列步骤操作:

  1. 计算多边形边界:通过识别最小和最大 X 和 Y 坐标来建立多边形的边界框它的顶点。
  2. 确定点是否在边界内:验证是否给定点位于多边形的边界框内。如果不是,则该点肯定在多边形之外。
  3. 检查多边形中的点包含:要确定该点是否实际上在多边形的形状内,请使用Point-in- Polygon 算法技术。

这样的算法之一是 Ray交叉方法,涉及以下步骤:

a.想象一下从给定点到无穷远绘制水平射线。

b。计算射线与多边形边缘相交的次数。

c.如果计数为奇数,则该点在多边形内部;如果是偶数,则位于多边形之外。

以下是用 C# 实现射线交叉算法的示例:

using System;
using System.Collections.Generic;
using System.Drawing;

public class Polygon
{
    List<PointF> vertices = new List<PointF>();

    public bool Contains(PointF point)
    {
        if (IsOutsideBoundingBox(point)) return false;

        int intersectionCount = 0;
        for (int i = 0; i < vertices.Count; i++)
        {
            int j = (i + 1) % vertices.Count;
            PointF a = vertices[i], b = vertices[j];
            if ((a.Y > point.Y && b.Y <= point.Y)
                || (a.Y <= point.Y && b.Y > point.Y))
            {
                double slope = (double)(b.Y - a.Y) / (b.X - a.X);
                if (point.X < a.X + (point.Y - a.Y) / slope)
                    intersectionCount++;
            }
        }

        return intersectionCount % 2 == 1;
    }

    private bool IsOutsideBoundingBox(PointF point)
    {
        return point.X < Xmin || point.X > Xmax || point.Y < Ymin || point.Y > Ymax;
    }
}

此实现在确定点是否在多边形内的同时确保了准确性和效率一个多边形。

以上是如何在 C# 中确定点是否位于多边形内?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn