我有4个点创造了一些四边形,我想知道第五点是否介于两者之间。 像这些图像:
第五点的位置并不重要,我需要知道第五点是否在其他4点所在的区域内。
也是4分能够移动。 我该怎么做?
答案 0 :(得分: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);
答案 1 :(得分: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
然后你计算y为x = 0(因为点D有x = 0)你知道D低于AB,低于BC但是它在CA(如果它高于CA,它将在三角形ABC内)。 / p>
答案 2 :(得分: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
是要检查它是否在多边形内的点。
关于运动部件,你必须自己解决这个问题!