【发布时间】:2018-05-18 06:36:54
【问题描述】:
我正在实现(在 C++ 中)一种方法来检测二维平面上的两个静态轴对齐形状之间何时发生重叠。形状是正方形或圆形,因此我需要考虑三种重叠情况:正方形-正方形、圆形-圆形和圆形-正方形。
方形和圆形足够简单,但我很难在网上找到任何关于计算方形重叠的正确算法的可靠信息。
我知道我可以将正方形嵌入圆内(反之亦然)作为一种粗略的方法,但我感兴趣的是什么被认为是更精确地做到这一点的最干净的方法?
在线研究表明这个问题有一个“正确”的答案,但不清楚这个答案到底是什么。
【问题讨论】:
-
更一般地,找到矩形(正方形)上离圆心最近的点。如果形状是 AA,这是微不足道的。如果没有,点积会给出这个。如果这个距离小于圆的半径,就会发生碰撞。除非圆完全在正方形内,否则您需要检查每个点是否包含(每个顶点到中心的距离与半径的距离。)
-
最干净的方法取决于为您的图形存储了哪些信息。你的圆是由 3 点的坐标建模的,还是你有中心和半径。对于您的矩形,同上 3 点,还是其他什么?如果你提供给我,我会很高兴回到高中数学!
-
或者我只是给你一个提示:让
A和B成为你的长方形l的边的末端,让我们C成为圆的中心。让我们d是C到线 (AB) 的距离,你有这个关系abs(ABxAC)=l*d其中x是叉积 AB 和 AC 是向量。此外,产品的标志可以指示圆心是朝内还是朝外。
标签: c++ algorithm geometry collision-detection