Java Rectangle Grow enlargeRectToGrid(Rectangle2D r)

Here you can find the source of enlargeRectToGrid(Rectangle2D r)

Description

Create a rectangle with the same area as the given input rectangle but with all of its edges snapped (rounded) to the integer grid.

License

Open Source License

Parameter

Parameter Description
r a parameter

Declaration

public static Rectangle enlargeRectToGrid(Rectangle2D r) 

Method Source Code

//package com.java2s;
/**/* www. jav  a2  s .co m*/
 * Copyright (C) 1995-2014 levigo holding gmbh.
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

import java.awt.Rectangle;
import java.awt.geom.Rectangle2D;

public class Main {
    private static final int BIG_ENOUGH_INT = 16 * 1024;
    private static final double BIG_ENOUGH_FLOOR = BIG_ENOUGH_INT;

    /**
     * Create a rectangle with the same area as the given input rectangle but with all of its edges
     * snapped (rounded) to the integer grid. The resulting rectangle is guaranteed to cover
     * <em>all</em> of the input rectangle's area, so that
     * <code>enlargeToGrid(r).contains(r) == true</code> holds. This can be depicted as the edges
     * being stretched in an outward direction.
     * 
     * @param r
     * @return
     */
    public static Rectangle enlargeRectToGrid(Rectangle2D r) {
        final int x0 = floor(r.getMinX());
        final int y0 = floor(r.getMinY());
        final int x1 = ceil(r.getMaxX());
        final int y1 = ceil(r.getMaxY());
        return new Rectangle(x0, y0, x1 - x0, y1 - y0);
    }

    /**
     * A fast implementation of {@link Math#floor(double)}.
     * 
     * @param x the argument
     * @return
     */
    public static int floor(double x) {
        return (int) (x + BIG_ENOUGH_FLOOR) - BIG_ENOUGH_INT;
    }

    /**
     * A fast implementation of {@link Math#ceil(double)}.
     * 
     * @param x the argument
     * @return
     */
    public static int ceil(double x) {
        return BIG_ENOUGH_INT - (int) (BIG_ENOUGH_FLOOR - x);
    }
}

Related

  1. enlargeRectangle(Rectangle2D rect, double d)
  2. enlargeRectangle(Rectangle2D toEnlarge, double size)
  3. grow(java.awt.Rectangle rv, int xPad, int yPad)
  4. grow(Rectangle2D r, float amountx, float amounty)
  5. grow(Rectangle2D rec, Point2D grow)
  6. grow(Rectangle2D.Double r, double h, double v)