首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >矩形碰撞检测

矩形碰撞检测
EN

Stack Overflow用户
提问于 2012-12-18 01:47:33
回答 3查看 1.8K关注 0票数 3
代码语言:javascript
复制
class Rectangle{
public:
   float x, y, width, height;
   // (x,y) is the lower left corner of the rectangle
};

这个算法正确吗?

代码语言:javascript
复制
bool Rectangle::colidesWith(Rectangle other) {
   if (x+width < other.x) return false; // "other" is on the far right
   if (other.x+other.width < x) return false; //"other" is on the far left
   if (y+height < other.y) return false // "other" is up
   if (other.y+other.height < y) return false // "other" is down
   return true;
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-12-18 01:50:48

这是如果矩形是填充的(即,您将其中一个在另一个内部的情况计为碰撞)。

票数 5
EN

Stack Overflow用户

发布于 2012-12-18 01:57:42

是啊。你可以把它看作超平面分离定理的特例,超平面分离定理是这个问题的一般版本。您正在将这些矩形投影到X和Y轴上,然后检查生成的线段之间是否有一些分隔。

票数 4
EN

Stack Overflow用户

发布于 2012-12-18 15:36:50

对我来说,写这个条件的更直观的方式是:

代码语言:javascript
复制
( max(r1.x, r2.x) < min(r1.x+r1.w, r2.x+r2.w) ) &&
( max(r1.y, r2.y) < min(r1.y+r1.h, r2.y+r2.h) )

实际上,这可以推广到任何维度。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13919303

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档