C#点在多段线内并记录该点位置
时间: 2024-04-06 14:30:43 浏览: 38
C# Winform多点触摸.zip
判断点是否在多边形内的代码已经给出,如果需要记录该点在多边形内的位置,可以将上述代码稍作修改:
```
public static bool PointInPolygon(PointF[] polygon, PointF point, out int index)
{
int count = 0;
index = -1;
for (int i = 0; i < polygon.Length; i++)
{
PointF p1 = polygon[i];
PointF p2 = polygon[(i + 1) % polygon.Length];
if (p1.Y == p2.Y)
{
continue;
}
if (point.Y < Math.Min(p1.Y, p2.Y))
{
continue;
}
if (point.Y >= Math.Max(p1.Y, p2.Y))
{
continue;
}
float x = (point.Y - p1.Y) * (p2.X - p1.X) / (p2.Y - p1.Y) + p1.X;
if (x > point.X)
{
count++;
if (index == -1)
{
index = i;
}
}
}
return count % 2 == 1;
}
```
这里新增了一个 `out` 参数 `index`,用于记录该点在多边形中的位置。如果点不在多边形内,`index` 的值为 -1。如果点在多边形内,`index` 的值为点所在的边的起始点在多边形顶点数组中的位置。
注意,这里假设多边形是简单多边形,即不会出现自交等特殊情况。如果多边形是复杂多边形,需要进行额外的处理。
阅读全文