C# 两个可旋转矩形的碰撞检测
我正在使用c#(单游戏引擎)制作一个2d游戏。我需要一个函数,根据旋转的矩形是否与其他也可以旋转的矩形碰撞,返回true或false 现在,我有一个函数,它根据两个矩形是否碰撞返回true或false。但是没有旋转 像这样的C# 两个可旋转矩形的碰撞检测,c#,collision-detection,monogame,C#,Collision Detection,Monogame,我正在使用c#(单游戏引擎)制作一个2d游戏。我需要一个函数,根据旋转的矩形是否与其他也可以旋转的矩形碰撞,返回true或false 现在,我有一个函数,它根据两个矩形是否碰撞返回true或false。但是没有旋转 像这样的 public bool Collision(int x1, int y1, int w1, int h1, int x2, int y2, int w2, int h2) { if (x1 < x2 + w2 && x1 + w
public bool Collision(int x1, int y1, int w1, int h1, int x2, int y2, int w2, int h2)
{
if (x1 < x2 + w2 &&
x1 + w1 > x2 &&
y1 < y2 + h2 &&
h1 + y1 > y2)
return true;
return false;
}
公共布尔冲突(intx1、inty1、intw1、inth1、intx2、inty2、intw2、inth2)
{
如果(x1x2&&
y1y2)
返回true;
返回false;
}
但是我有两个对象来代替所有这些参数
谢谢。您可以构建两个对象并调用
旋转矩形的碰撞检测比轴对齐矩形的碰撞检测更具挑战性,但这并不是很难: 其基本思想是两个矩形相交,当且仅当不能在它们之间画直线时。这听起来很明显,事实上对于任何凸面形状都是如此 然而,我们可以使事情变得简单一些,因为我们处理的是矩形:其中一条潜在的分界线将平行于矩形的一条边。剩下4个可能的轴(每个矩形两个)。我们只知道这条线是平行的,不知道它到底在哪里,但有一个技巧: 对于每个直线方向,让我们创建另一条垂直于该方向的直线。然后,我们在这条线上投影两个矩形。现在我们可以检查矩形是否重叠 如果他们知道,我们什么都不知道,但如果他们不知道,我们知道矩形肯定不相交 一旦我们尝试了所有四个可能的方向,但没有找到一个分离的轴,我们知道矩形相交 唯一具有挑战性的部分是将矩形投影到直线上。这是使用点积完成的,但您可能会在其他地方找到更好的解释。基本思想是将矩形的每个角变成一个数字,表示它在直线上的距离。然后取每个矩形的最小值和最大值,检查这些区域是否重叠 很抱歉,我没有提供任何代码,但应该可以按照这些步骤获得一个工作的实现 我的回答基于此(您也可以在此处找到图片):
复制我认为这不起作用,因为矩形不存储任何旋转。IntersectsWith()与他已有的代码是一样的。在这种情况下,他可以围绕旋转应用一些矩阵逻辑,好的,再次感谢。
public bool Collision(int x1, int y1, int w1, int h1, int x2, int y2, int w2, int h2)
{
var rect1 = new System.Drawing.Rectangle(x1,y1,w1,h1);
var rect2 = new System.Drawing.Rectangle(x2,y2,w2,h2);
return rect1.IntersectsWith(rect2);
}