Polígonos regulares
Un polígono regular es un polígono en el que todos los lados tienen la misma longitud y todos los ángulos interiores tienen el mismo valor.
Todos los polígonos regulares se pueden inscribir perfectamente en una circunferencia.
Para dibujar polígonos podemos utilizar tanto el elemento <polygon>, como el elemento <polyline>
Elemento | ejemplo | Descripción |
---|---|---|
<polygon> | <polygon points = "220,10 300,210 220,250 140,210" style="fill: #6ab150; stroke: #003300; stroke-width: 3" /> | Dibuja un polígono |
<polyline> | <polyline points = "220,10 300,210 220,250 140,210" style= "fill: #6ab150; stroke: #003300; stroke-width: 3" /> | Dibuja una polilínea |
Repaso de geometría
Para calcular las coordenadas x
e y
de un punto en la circunferencia de un círculo utilizamos las siguientes fórmulas:
var x = cx + r * Math.cos(a);
var y = cy + r * Math.sin(a);
Donde cx
y cy
son las coordenadas del centro del círculo;
r
es el radio del círculo;
a
es el ángulo en radianes entre el punto 0π
y este punto.
Las coordenadas del punto 0π
son x0 = cx + r
; y0 = cy
.
Utilizaremos más adelante estas formulas.
Dibujar un hexágono
Todos los polígonos regulares se pueden inscribir en una circunferencia. Por lo tanto tenemos que definir la posición del centro y el radio de este círculo.
var cx = 125;
var cy = 100;
var r = 70;
También definimos el número de lados
del polígono. Un hexágono tiene 6 lados, pero cambiando el número de lados podemos conseguir otros polígonos regulares.
var lados = 6;
En el siguiente ejemplo utilizamos el elemento <polygon>
, pero podemos utilizar también el elemento <polyline>
Un polígono SVG
es en realidad un elemento que pertenece al DOM
, y por lo tanto un <script>
puede referirse al polígono, y lo puede manipular.
El elemento <poygon>
tiene asignado un id="poligono"
, para poder identificarlo y guardarlo en una variable.
var poligono = document.getElementById("poligono");
Después utilizando el método setAttribute
podemos modificar el valor del atributo points
.
poligono.setAttribute("points", nuevoValor);
Escribimos la función points()
La función points()
calcula el nuevoValor
del atributo points
. Vayamos por partes.
1. Todos los ángulos centrales de un polígono regular son iguales entre si y su medida a
puede obtenerse a partir del número de lados del polígono.
var a = 360/lados;
2. Iniciamos la variable var points
, que nos dará el nuevo valor del atributo points
. El punto de partida ( donde empezamos a dibujar el polígono ) es el punto 0π
.
var points = ( cx + r ) + "," + cy + " ";
donde cx
, cy
son las coordenadas del centro y r
es el radio del círculo circunscrito.
3. Para calcular el resto de los puntos utilizamos un bucle for
( for loop ), donde cada paso del bucle calcula otro punto del polígono.
for( var i = 1; i < = lados; i++ ){
var aRad = ( Math.PI / 180 ) * ( a*i );
Xp = cx + r * Math.cos( aRad );
Yp = cy + r * Math.sin( aRad );
points + = Xp + "," + Yp + " ";
}
Miremos de cerca el bucle for
:
- Primero calcula el valor en radianes del ángulo ( un múltiple de a
).
- Después calcula las coordenadas Xp
e Yp
del punto en la circunferencia del circulo circunscrito.
- Al final añade estas coordenadas al valor de la variable points
.
4. Finalmente la función devuelve ( return
) el valor de var points
return points;
Poniendolo todo junto
No te olvides: siempre que sea posible, pon el JavaScript
dentro del <body>
, justo antes de su cierre: los estilos arriba, los scripts al fondo.
// define algunas variables necesarias
var cx = 125;
var cy = 100;
var r = 70;
var lados = 6;
// la función points
function points(cx, cy, r, lados){
var a = 360/lados;
// inicia la variable points
var points= (cx+r)+","+cy+" ";
// calcula el resto de los puntos
for(var i=1;i <= lados;i++){
var aRad= (Math.PI / 180) * (a*i);
Xp = cx+r * Math.cos(aRad);
Yp = cy+r * Math.sin(aRad);
points += Xp+","+Yp+" ";
}
// devuelve la variable points
return points
}
// busca el elemento #poligono
var poligono = document.getElementById("poligono");
// modifica el valor del atributo points utilizando la función points.
poligono.setAttribute("points", points(cx, cy, r, lados));
Galería de polígonos regulares
Solo con cambiar el valor del número de lados
del trazado podemos conseguir cualquiera de estos polígonos regulares. Los polígonos regulares que aparecen a continuación fueron girados 90° en el sentido contrario del reloj: rotate(-90 60 60)
.