@Override public boolean check(Sprite oval, Sprite rectangle) { oval = oval.toCircle(rectangle, serviceOval1); if ((rectangle.getX() - rectangle.getWidth() * 0.5 <= oval.getX() && oval.getX() <= rectangle.getX() + rectangle.getWidth() * 0.5) || (rectangle.getY() - rectangle.getHeight() * 0.5 <= oval.getY() && oval.getY() <= rectangle.getY() + rectangle.getHeight() * 0.5)) { if (2.0 * Math.abs(oval.getX() - rectangle.getX()) < oval.getWidth() + rectangle.getWidth() - inaccuracy && 2.0 * Math.abs(oval.getY() - rectangle.getY()) < oval.getWidth() + rectangle.getHeight() - inaccuracy) return true; } else { double dX = Math.abs(rectangle.getX() - oval.getX()) - 0.5 * rectangle.getWidth(); double dY = Math.abs(rectangle.getY() - oval.getY()) - 0.5 * rectangle.getHeight(); double radius = 0.5 * oval.getWidth() - inaccuracy; if (dX * dX + dY * dY < radius * radius) return true; } return false; }