// Last edited on 2001-05-15 22:59:12 by mc726 // Um retângulo em coordenadas do mapa import java.awt.Rectangle; import java.lang.Math; import Ponto; public final class Retangulo { public double xMin; public double xMax; public double yMin; public double yMax; public Retangulo() // Um retângulo vazio. { xMin = +1.0; xMax = -1.0; yMin = +1.0; yMax = -1.0; } public Retangulo(double x, double y) // Um retângulo restrito a um ponto. { xMin = x; xMax = x; yMin = y; yMax = y; } public Retangulo(double xLo, double xHi, double yLo, double yHi) // Um retângulo restrito a um ponto. { xMin = xLo; xMax = xHi; yMin = yLo; yMax = yHi; } public boolean vazio() // Testa se o retângulo é vazio. { return (xMin > xMax) || (yMin > yMax); } public boolean contem(double x, double y) { return (x >= xMin) && (x <= xMax) && (y >= yMin) && (y <= yMax); } public Rectangle arredonda() // Converte o retângulo para o formato padrão Java. { Rectangle r = new Rectangle(); if (vazio()) { r.x = 0; r.y = 0; r.width = 0; r.height = 0; } else { r.x = (int)Math.floor(xMin); r.width = (int)Math.ceil(xMax) - r.x; r.y = (int)Math.floor(yMin); r.height = (int)Math.ceil(yMax) - r.y; } return r; } public void insereBola(double x, double y, double r) // Insere o círculo de centro "(x,y)" e raio "r" no retângulo "r". { if (vazio()) { xMin = x - r; xMax = x + r; yMin = y - r; yMax = y + r; } else { xMin = (x - r < xMin ? x - r : xMin); yMin = (y - r < yMin ? y - r : yMin); xMax = (x + r > xMax ? x + r : xMax); yMax = (y + r > yMax ? y + r : yMax); } } public void insereXY(double x, double y) // Insere o ponto "(x,y)" no retângulo "r". { if (vazio()) { xMin = x; xMax = x; yMin = y; yMax = y; } else { xMin = (x < xMin ? x : xMin); yMin = (y < yMin ? y : yMin); xMax = (x > xMax ? x : xMax); yMax = (y > yMax ? y : yMax); } } public void inserePontos(Ponto[] p) // Insere os pontos "p[i]" no retângulo "r". { for (int k=0; k < p.length; k++) { Ponto pk = p[k]; insereXY(pk.x, pk.y); } } public void expande(double delta) // Expande o retângulo de "delta" em todas as direções. { if (! vazio()) { xMin -= delta; xMax += delta; yMin -= delta; yMax += delta; } } }