旋转矩形中的碰撞检测

时间:2012-02-13 13:50:33

标签: java android math collision-detection

我有以下参数

  1. x,y坐标(仅左上角)旋转的矩形
  2. 旋转角度
  3. 矩形通过中心旋转
  4. 矩形的宽度和高度
  5. 必须检查矩形中存在的点的坐标
  6. 如何检查点是否位于矩形内?

    任何指针都将非常感激。感谢。

3 个答案:

答案 0 :(得分:5)

基本检查

如果您的矩形未旋转,则问题仅限于检查Point(x,y)是否在某个范围之间

(rectangle.x, rectangle.x + rectangle.width)
(rectangle.y, rectangle.y + rectangle.height)

添加轮播

当旋转矩形时,您可以进行反向旋转以使该点处于“未旋转状态”并进行上一次检查。

如何“取消旋转”这一点

好。如果您的矩形旋转27º,则“非旋转”必须为-27º(从相同的旋转中心点开始)。

如何旋转给定旋转中心点的点?

嗯,你必须:

  1. 翻译要使(0,0)中心点的东西:它是,翻译原始点(-x,-y),其中(x,y)是旋转点
  2. 对原点进行轮换(参见下文)
  3. 撤消第一个转换(translate(x,y),其中(x,y)是旋转点
  4. 原点旋转

    你必须制作矩阵乘法Ax。其中A是矩阵,x是要旋转的点的(x,y)向量。

    Matrix A构建为this way

答案 1 :(得分:0)

如果你可以使用awt,你可以创建一个Shape实例然后使用:Shape.contains(Point2D p)。

文档在这里:http://docs.oracle.com/javase/1.5.0/docs/api/index.html?java/awt/Graphics.html Java 2D教程在这里:http://java.sun.com/developer/technicalArticles/GUI/java2d/java2dpart1.html#1

HTH

答案 2 :(得分:0)

将所有坐标转换为旋转参考坐标系,其中矩形位于中心并沿轴对齐。然后检查坐标范围。

要在帧之间进行转换,请使用以下公式:http://en.wikipedia.org/wiki/Rotating_reference_frame#Relation_between_positions_in_the_two_frames

P.S。对不起,此链接更适合静态情况: http://en.wikipedia.org/wiki/Rotation_(mathematics)#Matrix_algebra