繁体   English   中英

检测内部带有矩形的圆圈之间的碰撞

[英]Detect collisions between circles with rectangles inside

我正在研究一个项目,我需要能够检测到圆圈之间的碰撞。 我已经找到了一个数学公式: http://cgp.wikidot.com/circle-to-circle-collision-detectionhttp://cgp.wikidot.com/circle-to-circle-collision-detection

但是我有一个问题,如何检测这个区域是否有矩形? 或者只是内部矩形的一部分?

我得到了:圆心和半径的坐标,对于矩形,我有ax和y坐标,宽度是高度。 我猜x和y只是一个点,我可以用宽度和高度来猜测形状。

碰撞示例

任何想法 ?

非常感谢 !

  1. 写一个方法来检查一个点是否在一个圆圈内。
  2. 对两个圆上的矩形的所有角点(从x,y,宽度和高度计算)调用该方法。
  3. 使用现有的圆形交叉检测器方法来修剪呼叫。

希望这可以帮助。
祝好运。

您可以使用java.awt.geom.Area类。

它有一个构造函数来从Shape创建一个Area

public Area(Shape s)

因此,为您的圆和矩形创建简单区域。 然后,您可以使用方法组合区域以获取新区域。

public void add(Area rhs)
public void subtract(Area rhs)

并检查区域是否相交或包含另一个区域

public void intersect(Area rhs)
public boolean contains(Rectangle2D r)

这听起来像是这个答案中描述的技术的变体。

相同的两种情况适用(圆圈的中心位于区域中,或者一个或多个矩形的边缘与区域相交)...不同之处在于,不需要考虑圆形,而是需要考虑圆形的交点。圈。

第一种情况很简单,因为您可以交换中心点。 如果矩形的中心点位于圆的交点,则矩形部分位于内部。 这很容易确定:找到矩形的中心点,看它是否在第一个圆圈中,看它是否在第二个圆圈中。

第二种情况很复杂,因为它需要您计算圆相交曲线 如果矩形的边缘与这些曲线中的任何一条相交,则矩形与交点重叠。 作为一种特殊情况,如果一个圆完全位于另一个圆内,则要检查的线是较小圆的边界。

如果您不需要确切的答案,那么第二种情况可以近似。 首先,找到两个圆相交的点 (或者使用你已经提出的方法,如果可以的话)。 这两个点可用于构造边界矩形(它们是矩形的左上/右下或右上/左下点)。 如果此边界矩形与矩形相交,则矩形可能与圆形交叉点重叠。

总而言之,如果你想得到一个适用于所有特殊情况的精确答案(一个圆圈完全在另一个圆圈内,矩形与两个圆圈相交但不与它们相交,等等),这相当复杂。 希望这会有帮助。

我之前使用的一个名为JTS拓扑套件的库 可能适合您的需求。 与纯欧几何几何相比,它更倾向于GIS操作,但是一旦定义了形状,它就可以轻松地为您完成所有这些计算:

import com.vividsolutions.jts.util.*

GeometricShapeFactory gsf = new GeometricShapeFactory();
gsf.setSize(100);
gsf.setNumPoints(100);
gsf.setBase(new Coordinate(100, 100));
//configure the circle as appropriate
Polygon circleA = gsf.createCircle();

//configure again and create a separate circle
Polygon circleB = gsf.createCircle();

//configure a rectangle this time
Polygon rectangle = gsf.createRectangle();

Geometry circleIntersection = circleA.intersection(circleB);
return rectangle.intersects(circleIntersection);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM