嘿,我正在编写一个快速程序,遇到了一些需要使用圆圈进行碰撞检测的地方。但据我所知,只有 Rectangle 类具有 .intersects(Point p) 方法。有没有类似圆圈的东西我可以用同样的方式?
3 回答
您可以使用包中调用的类Ellipse2D
,java.awt.geom
因为它有一些似乎是您正在寻找的方法。宽度等于高度的椭圆是圆。
重载之一contains
允许您测试圆点碰撞:
boolean contains(double x, double y)
测试指定的坐标是否在 的边界内
Shape
,如 insideness 的定义所述。
另一个调用的函数intersects
允许您测试圆矩形碰撞:
boolean intersects(double x, double y, double w, double h)
测试内部是否与
Shape
指定矩形区域的内部相交。
注意这Ellipse2D
是一个抽象类;您将使用其中一个嵌套子类Ellipse2D.Double
或Ellipse2D.Float
,唯一的区别是用于存储维度的数据类型。
有一个 ellipse2D,这就像正方形是矩形,圆形是椭圆一样。
http://docs.oracle.com/javase/7/docs/api/java/awt/geom/Ellipse2D.html
java.awt.Shape 也是。以及实现它的所有类:Arc2D、Arc2D.Double、Arc2D.Float、Area、BasicTextUI.BasicCaret、CubicCurve2D、CubicCurve2D.Double、CubicCurve2D.Float、DefaultCaret、Ellipse2D、Ellipse2D.Double、Ellipse2D.Float、GeneralPath、Line2D、 Line2D.Double, Line2D.Float, Path2D, Path2D.Double, Path2D.Float, 多边形, QuadCurve2D, QuadCurve2D.Double, QuadCurve2D.Float, Rectangle, Rectangle2D, Rectangle2D.Double, Rectangle2D.Float, RectangularShape, RoundRectangle2D, RoundRectangle2D.Double, RoundRectangle2D.Float