Dibujar Polígono Regular Raíces n-ésimas Con Octave

por | 2 noviembre, 2013

Hola
Últimamente estoy utilizando bastante el programa de Octave para realizar algoritmos matemáticos, pero esta vez voy a poner el código de cómo dibujar el polígono regular de la ecuación polinómica del tipo x^n+a=0, en particular, para x^{11}+1=0, la cual tiene 11 raíces simples, de las cuales 10 son complejas conjugadas y la restante es la raíz real -1.
El tema es que no es sencillo realizar esto con Octave, se necesita recurrir al paquete Geometry de los paquetes de Octave en Sourceforge, cosa que es la primera vez que utilizo.


Para utilizar estos paquetes extra cada vez que inicias Octave he tenido que cargarlos previamente con el comando:

pkg load all

El paquete Geometry permite muchas cosas de dibujar figuras geométricas, para el código que he realizado he utilizado:

createCircle -> Para crear la circunferencia goniométrica (o circunferencia unidad).

drawCircle -> Para dibujar la circunferencia goniométrica.
drawEdge -> Para dibujar los segmentos que parten del origen hacia cada uno de los vértices del polígono.
drawLabels -> Para dibujar las etiquetas a cada vértice del polígono


Además, en Octave existe el comando patch para poder dibujar polígonos, tanto regulares como irregulares.
Desgraciadamente la documentación en Octave sobre todo esto es bastante pobre y confusa; por lo que me he tenido que buscar las habichuelas en la documentación de Matlab

Lo que más me ha costado es hacer que las Etiquetas se coloquen en su sitio correcto, al final pensando un poco lo he solucionado creando un vector h nulo, al que después le he asignado a cada elemento lo que he realizado con el comando drawLabels para con el comando delete de Octave borrar las 4 etiquetas que no quedaban bien dibujadas y volverlas a dibujar con drawLabels. Sin más pongo el código aquí:

[matlab]
clf();
hold on; axis equal;
axis ([-1.5, 1.5,-1.5,1.5], ‘square’);
grid;
n=11;

for k =1:11
h(k)=0;
end

for k=0:10
x(k+1)=cos(((2*k+1)*pi)/n);
y(k+1)=sin(((2*k+1)*pi)/n);
if(x(k+1)>0 && y(k+1)>0 || x(k+1)>0 && y(k+1)<0)
h(k+1) = drawLabels(x(k+1)+0.1,y(k+1)+0.1,[‘\omega_’ num2str(k)]);
else
h(k+1) = drawLabels(x(k+1)-0.25,y(k+1)+0.1,[‘\omega_’ num2str(k)]);
end
end

for k = 8:11
delete(h(k));
end

drawLabels(x(8)-0.25,y(8),’\omega_{7}’);
drawLabels(x(9),y(9)-0.1,’\omega_{8}’);
drawLabels(x(10),y(10)-0.1,’\omega_{9}’);
drawLabels(x(11)+0.1,y(11),’\omega_{10}’);

p1 = [1 0];
p2 = [0 1];
p3 = [-1 0];
origin = [0 0];

circle = createCircle(p1, p2,p3);

drawCircle (circle,’r’,’LineWidth’,2);
patch(x,y,’b’,’EdgeColor’,’b’,’Marker’,’o’,’MarkerFaceColor’,’flat’,’MarkerSize’,8,’LineWidth’,2,’FaceAlpha’,0.15);

for k=0:10
edge = [0 0 x(k+1) y(k+1)];
drawEdge(edge, ‘linewidth’, 1.15,’color’,’b’);
end

title(‘Raices onceavas de la unidad’);
[/matlab]

Y pongo también una imagen del resultado final:

Raíces Octave

Con un poco de conocimientos de Octave se puede generalizar el código para cualquier raíz n-ésima.
Saludos

Un pensamiento en “Dibujar Polígono Regular Raíces n-ésimas Con Octave

  1. Pingback: Bitacoras.com

Los comentarios están cerrados.