2

我有 4 个点可以创建一些四边形,我想知道第五个点是否在它们之间。像这些图像:

在此处输入图像描述

在此处输入图像描述

第五个点在哪里并不重要,我需要知道第五个点是否在其他 4 个点创建的区域内。

4个点也可以移动。我怎么做?

4

3 回答 3

5

您可以使用GraphicsPath类。

Point p1 = new Point(1,0);
Point p2 = new Point(10, 3);
Point p3 = new Point(9, 13);
Point p4 = new Point(3,2);
Point p = new Point(5,5);
GraphicsPath g = new GraphicsPath();
g.AddPolygon(new Point[] { p1, p2, p3, p4 });
var result = g.IsVisible(p);
于 2013-03-07T01:11:12.307 回答
1

如果您有这些点的坐标,请尝试获得创建四边形的点的线性方程。我会用三角形的点来解释它。假设我们在外面有 3 个点:

A(-1,-1)
B(0,2)
C(1,1)

和一个里面:

D(0,0)

您可以找到外部点的线性方程:

AB -> y = 3x + 2
BC -> y = -x + 2
CA -> y = x

然后你计算 x=0 的 y(因为点 D 有 x=0)并且你知道 D 低于 AB,低于 BC 但它在 CA(如果它高于 CA,它将在三角形 ABC 内)。

于 2013-03-06T22:36:26.973 回答
0
public class PolygonFence
{
    public List<Point> PointList = new List<Point>();

    public PolygonFence(List<Point> points)
    {
        foreach (Point p in points)
        {
            this.PointList.Add(p);
        }
    }

    public int Count()
    {
        return PointList.Count;
    }

    public bool IsWithinFence(Point p)
    {
        int sides = this.Count();
        int j = sides - 1;
        bool pointStatus = false;
        for (int i = 0; i < sides; i++)
        {
            if (PointList[i].Y < p.Y && PointList[j].Y >= p.Y || PointList[j].Y < p.Y && PointList[i].Y >= p.Y)
            {
                if (PointList[i].X + (p.Y - PointList[i].Y) / (PointList[j].Y - PointList[i].Y) * (PointList[j].X - PointList[i].X) < p.X)
                {
                    pointStatus = !pointStatus;
                }
            }
            j = i;
        }
        return pointStatus;
    }
}

将点添加到PointList并调用该IsWithinFence()方法。 Point p是您要检查它是否在多边形内的点。关于运动的部分,你必须自己弄清楚!

于 2013-10-10T14:06:19.333 回答