Dibujar una elipse con path
Dibujar una elipse
Para dibujar una elipse hay que trazar un arco elíptico que acaba casi en el mismo punto donde empieza
( a100,70 0 1, 0 0,-1 z ) y lo cerramos con closepath ( a100,70 0 1, 0 0,-1 z ).
Es importante que escojamos la parte grande de la curva: large-arc-flag = 1
( a100,70 0 1, 0 0,-1 z )
El pequeño circulo <circle class="origen"
marca el punto donde empezamos a dibujar.
Cómo calcular el centro de una elipse
Asumiendo que:
- se trata de una elipse horizontal ( el eje mayor es horizontal )
- que rx
y ry
son los radios de la elipse
- que el parámetro sweep-flag = 1
( dibuja el arco en el sentido del reloj ).
- que x0,y0
son las coordenadas del punto de origen ( donde empezamos a dibujar la elipse )
las coordenadas del centro del circulo son:
var cx= x0 – rx;
var cy= y0;
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.
var rx = 100;
var ry = 70;
var cx = 225-rx;
var centro = document.getElementById("centro");
centro.setAttribute("cx",cx);
Cómo calcular los focos de una elipse
Los focos de la elipse son dos puntos equidistantes del centro, y situados en el eje mayor.
La distancia entre el centro de la elipse y uno de los focos es:
c = √rx2-ry2
Ya que hay que calcular las coordenadas de los focos utilizaremos JavaScript
.
Traduciendo a JavaScript
las fórmulas utilizadas obtenemos:
var c = Math.sqrt((rx*rx)-(ry*ry))
las coordenadas de F1
var F1x = cx - c = cx - Math.sqrt((rx*rx)-(ry*ry))
var F1y = cy
Y las coordenadas de F2
var F2x = cx + c = cx + Math.sqrt((rx*rx)-(ry*ry))
var F2y = cy
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.
var rx = 100;
var ry = 70;
var cx = 225-rx;
var cy = 100;
var Focus1 = document.getElementById("Focus1");
var F1cx = parseInt(cx+Math.sqrt((rx*rx)-(ry*ry)));
Focus1.setAttribute("cx",F1cx);
var Focus2 = document.getElementById("Focus2");
var F2cx = parseInt(cx-Math.sqrt((rx*rx)-(ry*ry)));
Focus2.setAttribute("cx",F2cx);
Como calcular la posición de un punto sobre la elipse
Para calcular las coordenadas de un punto ( xp,yp
) en la circunferencia de una elipse utilizaremos las siguientes fórmulas:
var xp = cx + rx * Math.cos(a);
var yp = cx + ry * Math.sin(a);
Donde cx
y cy
son las coordenadas del centro de la elipse;
rx, ry
son los radios de la elipse: el radio horizontal (rx
) y el radio (ry
)
a es el ángulo entre el origen del trazado y este punto.
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.
var rx = 100;
var ry = 70;
var cx = 225-rx;
var cy = 100;
var a =290; // ángulo
var arad = (Math.PI / 180) *a;
var xp = parseInt(cx+rx*Math.cos(arad));
var yp = parseInt(cy+ry*Math.sin(arad));
var punto = document.getElementById("punto");
punto.setAttribute("cx",xp);
punto.setAttribute("cy",yp);
NOTA: Las líneas que marcan el ángulo, y el valor del mismo no pertenecen al código. Su propósito es exclusivamente didáctico.