Los rectángulos organizan gran parte del mundo 2D: ventanas, botones, imágenes, mapas, sprites y regiones de colisión. El cuadrado añade igualdad de lados y simetrías especialmente útiles.
Un rectángulo es un cuadrilátero con cuatro ángulos rectos. Sus lados opuestos son paralelos e iguales. Esta estructura sencilla permite representarlo con pocos datos y realizar cálculos muy rápidos.
Un cuadrado es simultáneamente rectángulo y rombo: conserva los cuatro ángulos de 90° y además tiene sus cuatro lados iguales.
En un cuadrado, las diagonales también son perpendiculares y dividen los ángulos de los vértices en partes de 45°.
En programación se emplean principalmente dos convenciones:
| Representación | Datos | Uso habitual |
|---|---|---|
| Esquina y tamaño | x, y, ancho, alto | Canvas, interfaces y sprites |
| Extremos | xmin, ymin, xmax, ymax | Colisiones y recortes |
| Centro y semitamaños | cx, cy, hw, hh | Transformaciones y física |
| Centro, ejes y semitamaños | C, ux, uy, hw, hh | Rectángulos rotados |
Conviene documentar si x,y representa la esquina superior izquierda o el centro para evitar desplazamientos inesperados.
Para w=6 y h=4, el perímetro es 20 y el área 24. Si duplicamos ambas dimensiones, el perímetro se duplica pero el área se cuadruplica.
Una diagonal es la hipotenusa de un triángulo rectángulo cuyos catetos son el ancho y el alto:
En un rectángulo de 6×4, d=√52≈7.21. El centro queda a la mitad de cada diagonal, por lo que la distancia del centro a cualquier vértice es d/2.
Si (x,y) es la esquina superior izquierda de un rectángulo de ancho w y alto h en coordenadas de pantalla:
En el plano matemático puede elegirse otra esquina como referencia; lo importante es mantener una convención coherente.
Para un rectángulo alineado con los ejes, basta comparar cada coordenada con los límites:
Usar ≤ incluye el borde. Con desigualdades estrictas, los puntos de los lados se consideran exteriores. Esta decisión debe responder a las reglas de la aplicación.
Un AABB permanece alineado con los ejes y se describe con mínimos y máximos. Es rápido para colisiones. Un OBB puede rotar y necesita centro, orientación y semitamaños.
Para probar un punto contra un OBB, trasladamos el punto respecto del centro, aplicamos la rotación inversa y comprobamos el rectángulo local:
Modifica ancho, alto, rotación y el punto P. El laboratorio calcula medidas y transforma el punto a coordenadas locales para decidir si pertenece al rectángulo.
Sin utilizar Canvas, podemos obtener sus vértices, área, perímetro y diagonal a partir de la esquina superior izquierda y el tamaño.
const rect = {
x: 2, y: 1,
ancho: 6, alto: 4
};
const vertices = [
{ x: rect.x, y: rect.y },
{ x: rect.x + rect.ancho, y: rect.y },
{ x: rect.x + rect.ancho, y: rect.y + rect.alto },
{ x: rect.x, y: rect.y + rect.alto }
];
const area = rect.ancho * rect.alto;
const perimetro = 2 * (rect.ancho + rect.alto);
const diagonal = Math.hypot(rect.ancho, rect.alto);
vertices.forEach((p, i) =>
console.log(`Vértice ${i + 1}: (${p.x}, ${p.y})`)
);
console.log(`Área: ${area}`);
console.log(`Perímetro: ${perimetro}`);
console.log(`Diagonal: ${diagonal.toFixed(2)}`);Al presionar Ejecutar, se muestran los cuatro vértices y las medidas del rectángulo. Este cálculo es independiente de cualquier sistema de dibujo.
function contienePunto(rect, p) {
return p.x >= rect.x &&
p.x <= rect.x + rect.ancho &&
p.y >= rect.y &&
p.y <= rect.y + rect.alto;
}
function esCuadrado(ancho, alto, epsilon=1e-9) {
return Math.abs(ancho - alto) < epsilon;
}
const rectangulo = { x: 2, y: 1, ancho: 6, alto: 4 };
const puntos = [
{ x: 4, y: 3 },
{ x: 8, y: 5 },
{ x: 9, y: 2 }
];
puntos.forEach(punto => {
const estado = contienePunto(rectangulo, punto) ? "dentro" : "fuera";
console.log(`(${punto.x}, ${punto.y}): ${estado}`);
});
console.log(`6 × 4 es cuadrado: ${esCuadrado(6, 4)}`);
console.log(`5 × 5 es cuadrado: ${esCuadrado(5, 5)}`);Al presionar Ejecutar, se clasifican tres puntos y se comprueban dos tamaños. Una tolerancia evita que pequeños errores de coma flotante impidan reconocer lados que deberían ser iguales.
Se utilizan en maquetación, botones, ventanas, selección, cámaras, sprites, atlas de texturas, recortes, límites de mapas y detección de colisiones.
El personaje se desplaza dentro de los límites del mapa. La ventana azul representa la cámara que lo sigue; los rectángulos rojos son obstáculos y cambian de color cuando sus límites AABB se solapan con los del personaje.
La estructura rectangular es simple, eficiente y ubicua. Dominar sus representaciones y transformaciones permite construir interfaces y sistemas de colisión sólidos.
En el próximo tema estudiaremos triángulos y sus propiedades.