C#中的多边形碰撞测试/多边形重叠测试-非多边形中的点

C#中的多边形碰撞测试/多边形重叠测试-非多边形中的点,c#,collision-detection,overlapping,point-in-polygon,C#,Collision Detection,Overlapping,Point In Polygon,我正在测试以确定两个多边形是否重叠。我开发了第一个版本,它可以进行简单的多边形点测试(图1)。但是,我希望改进该方法,以处理多边形A的顶点不在多边形B中但其线段重叠的情况(图B) 如果您有任何帮助,我们将不胜感激 以下是使用区域的示例: GraphicsPath grp = new GraphicsPath(); // Create an open figure grp.AddLine(10, 10, 10, 50); // a of polygon grp.AddLine(1

我正在测试以确定两个多边形是否重叠。我开发了第一个版本,它可以进行简单的多边形点测试(图1)。但是,我希望改进该方法,以处理多边形A的顶点不在多边形B中但其线段重叠的情况(图B)

如果您有任何帮助,我们将不胜感激


以下是使用区域的示例:

  GraphicsPath grp = new GraphicsPath();

  // Create an open figure
  grp.AddLine(10, 10, 10, 50); // a of polygon
  grp.AddLine(10, 50, 50, 50); // b of polygon
  grp.CloseFigure();           // close polygon

  // Create a Region regarding to grp
  Region reg = new Region(grp);

现在,您可以使用该方法确定区域是在矩形中还是在点中。

以下是使用区域的示例:

  GraphicsPath grp = new GraphicsPath();

  // Create an open figure
  grp.AddLine(10, 10, 10, 50); // a of polygon
  grp.AddLine(10, 50, 50, 50); // b of polygon
  grp.CloseFigure();           // close polygon

  // Create a Region regarding to grp
  Region reg = new Region(grp);

现在,您可以使用该方法确定区域是在矩形中还是在点中。

以下是使用区域的示例:

  GraphicsPath grp = new GraphicsPath();

  // Create an open figure
  grp.AddLine(10, 10, 10, 50); // a of polygon
  grp.AddLine(10, 50, 50, 50); // b of polygon
  grp.CloseFigure();           // close polygon

  // Create a Region regarding to grp
  Region reg = new Region(grp);

现在,您可以使用该方法确定区域是在矩形中还是在点中。

以下是使用区域的示例:

  GraphicsPath grp = new GraphicsPath();

  // Create an open figure
  grp.AddLine(10, 10, 10, 50); // a of polygon
  grp.AddLine(10, 50, 50, 50); // b of polygon
  grp.CloseFigure();           // close polygon

  // Create a Region regarding to grp
  Region reg = new Region(grp);

现在,您可以使用该方法确定区域是在矩形中还是在点中。

解决方案:

我修改了找到的一些代码

private Region FindIntersections(列出区域)
{
if(regions.Count<1)返回null;
区域=新区域();
对于(int i=0;i
结果:


解决方案:

我修改了找到的一些代码

private Region FindIntersections(列出区域)
{
if(regions.Count<1)返回null;
区域=新区域();
对于(int i=0;i
结果:


解决方案:

我修改了找到的一些代码

private Region FindIntersections(列出区域)
{
if(regions.Count<1)返回null;
区域=新区域();
对于(int i=0;i
结果:


解决方案:

我修改了找到的一些代码

private Region FindIntersections(列出区域)
{
if(regions.Count<1)返回null;
区域=新区域();
对于(int i=0;i
结果:



您只需在多边形测试中选择相反的点即可。i、 e.
var isCollision=IsPointInPolygon(a,b)| | IsPointInPolygon(b,a)
Mike,你能再详细一点吗?使用你在图2中展示的示例图像,三角形在矩形中没有点;但是,矩形在三角形中有一个点。如果两个多边形重叠,那么其中一个多边形将在另一个多边形中有一个点。检查A是否在B中有一个点,以及B是否在A中有一个点,如果其中一个是真的,则存在碰撞,如果两个都不是真的,则它们不接触。我一发表评论,我就更全面地了解了你在说什么。然而,我想知道如何处理更复杂的多边形。所有复杂的多边形都可以分解成三角形组。我不是一个碰撞大师,所以这里可能有一个更有效的方法,但快速而肮脏的方法是简单地检查所有三角形,从多边形a到B,然后从B到a。所有你需要做的就是多边形测试中的相反点。i、 e.
var isCollision=IsPointInPolygon(a,b)| | IsPointInPolygon(b,a)
Mike,你能再详细一点吗?使用你在图2中展示的示例图像,三角形在矩形中没有点;但是,矩形在三角形中有一个点。如果两个多边形重叠,那么其中一个多边形将在另一个多边形中有一个点。检查A是否在B中有一个点,以及B是否在A中有一个点,如果其中一个是真的,则存在碰撞,如果两个都不是真的,则它们不接触。我一发表评论,我就更全面地了解了你在说什么。然而,我想知道如何处理更复杂的多边形。所有复杂的多边形都可以分解成三角形组。我不是一个碰撞大师,所以这里可能有一个更有效的方法,但快速而肮脏的方法是简单地检查所有三角形,从多边形a到B,然后从B到a。所有你需要做的就是多边形测试中的相反点。i、 e.
var isCollision=IsPointInPolygon(a,b)| | IsPointInPolygon(b,a)
Mike,你能再详细一点吗?使用你在图2中展示的示例图像,三角形在矩形中没有点;但是,矩形在三角形中有一个点。如果两个多边形重叠,那么其中一个多边形将在另一个多边形中有一个点。检查A是否在B中有一个点,以及B是否在A中有一个点,如果其中一个是真的,则存在碰撞,如果两个都不是真的,则它们不接触。我一发表评论,我就更全面地了解了你在说什么。然而,我想知道如何处理更复杂的多边形。所有复杂的多边形都可以分解成三角形组。我不是一个碰撞大师,所以这里可能有一个更有效的方法,但快速而肮脏的方法是简单地检查所有三角形,从多边形a到B,然后从B到a。所有你需要做的就是多边形测试中的相反点。i、 e.
var isCollision=IsPointInPolygon(a,b)| | IsPointInPolygon(b,a)
Mike,Can