给定多边形的顶点,对2D(凸)多边形进行碰撞检测

时间:2018-12-27 00:30:19

标签: c# algorithm collision-detection polygon

为我提供了一个2D坐标点的列表,这些坐标是多边形的顶点。我应该在多边形板上放置随机创建的多边形,以免它们相互碰撞。

作为随机函数的上下限,我找到了给定点的边界矩形框。 (我只是找到这个来指定随机生成器函数的边界。)

在这里,我假设所有随机多边形都是矩形。然后,我在每一步随机创建8个点,它们代表一个矩形的顶点: (x1,y1,x2,y2,x3,y3,x4,y4)

现在要知道是否:

  1. 矩形在多边形板的内部,
  2. 矩形不与先前放置的矩形发生碰撞,

我要使用碰撞检测算法,该算法基于分离轴定理,并在here中进行了说明。

var rand = new Random();

var numbers = new List<int>(); // A sample of one of the rectangles

numbers.Add(rand.Next(0, 100)); // x1
numbers.Add(rand.Next(0, 100)); // y1
numbers.Add(numbers[0] + rand.Next(1, 10)); //x3
numbers.Add(numbers[1] + rand.Next(1, 10)); //y3
numbers.Add(numbers[0]); // x4
numbers.Add(numbers[3]); // y4
numbers.Add(numbers[2]); // x2
numbers.Add(numbers[1]); // y2


var numbers2 = new List<int>(); // We assume that this is the given
//original polygon board

numbers2.Add(rand.Next(70, 200)); // x1
numbers2.Add(rand.Next(70, 200)); // y1
numbers2.Add(numbers2[0] + rand.Next(1, 10)); //x3
numbers2.Add(numbers2[1] + rand.Next(1, 10)); //y3
numbers2.Add(numbers2[0]); // x4
numbers2.Add(numbers2[3]); // y4
numbers2.Add(numbers2[2]); // x2
numbers2.Add(numbers2[1]); // y2

现在,让我们忘记循环遍历先前放置的矩形并进行检查。我只想知道:

  1. 如何在每两个2D点(代表矩形的一面)之间定义一条连接线,然后找到与其垂直的线? (我在控制台应用程序中)。

      

    point1 =(x1,y1),point2 =(x2,y2)依此类推。另外,point1应该是   连接到point2,point2连接到point3,依此类推,最后一个连接到   再次指向point1。

  2. 如何在垂直线上投影每个矩形各边的所有点?

  3. 或者如果有一种完全不同的方法来解决此问题,那会更容易:)

0 个答案:

没有答案