Geometria

Hola, soy estudiante de informatica y tengo un problemilla con la primera practica de programacion
Tengo que programar parte de un programa para que me dibuje un poligono regular circunscrito en una circunferencia
Lo que necesito es averiguar el radio del circulo, sabiendo el tamaño de los lados y el numero de lados
y no tengo ni idea de como acerlo
http://img826.imageshack.us/img826/8345/sinttuloyf.png
Si no recuerdo mal se hacía en base a la apotema:

http://es.wikipedia.org/wiki/Apotema

Pero no me hagas mucho caso que te hablo de memoria y ni siquiera me he dignado a leer el enlace de la wikipedia.
Esto también lo tuve que hacer yo cuando estudiaba programación. En realidad es bastante facilongo. Tienes que usar las funciones trigonométricas para calcular los valores x,y de cada vértice del polígono. Si el polígono tiene 6 lados pues divide 360 entre 6 y te da 60 grados. Por lo que el primer vertice será x= cos(0º), y = sen(0º). el siguiente sería x=cos(60º), y = sen(60º). Ahora ya puedes pintar una línea desde la x,y del primer vértice y la x,y del segundo obtenido. Sigue averiguando vértices y pintando líneas incrementando el ángulo en 60 grados hasta que llegues a 360º.

Ah, se me olvidaba: las funciones trigonómetricas solo devuelven valores comprendidos entre -1 y 1 por lo que tendrás que sumarle a cada x,y el radio de tu circunferencia.

Espero haberme explicado bien. A ver si ahora te voy a liar más. :p
TwSh escribió:Esto también lo tuve que hacer yo cuando estudiaba programación. En realidad es bastante facilongo. Tienes que usar las funciones trigonométricas para calcular los valores x,y de cada vértice del polígono. Si el polígono tiene 6 lados pues divide 360 entre 6 y te da 60 grados. Por lo que el primer vertice será x= cos(0º), y = sen(0º). el siguiente sería x=cos(60º), y = sen(60º). Ahora ya puedes pintar una línea desde la x,y del primer vértice y la x,y del segundo obtenido. Sigue averiguando vértices y pintando líneas incrementando el ángulo en 60 grados hasta que llegues a 360º.

Ah, se me olvidaba: las funciones trigonómetricas solo devuelven valores comprendidos entre -1 y 1 por lo que tendrás que sumarle a cada x,y el radio de tu circunferencia.

Espero haberme explicado bien. A ver si ahora te voy a liar más. :p


no me lias, todo lo contrario, me as aclarado un poquito pero lo que no tengo es el radio de la circunferencia que es lo unico que me vuelve loco
Sabiendo lo que mide el lado del pentágono y el ángulo que forma la hipotenusa con este ya puedes obtener el tamaño de la hipotenusa, que en este caso es el radio de la circunferencia.

Un saludo.
Muchas gracias, asi lo intentare ya dire si lo consigo
Andy_Manu escribió:Hola, soy estudiante de informatica y tengo un problemilla con la primera practica de programacion
Tengo que programar parte de un programa para que me dibuje un poligono regular circunscrito en una circunferencia
Lo que necesito es averiguar el radio del circulo, sabiendo el tamaño de los lados y el numero de lados
y no tengo ni idea de como acerlo
http://img826.imageshack.us/img826/8345/sinttuloyf.png


hay q usar la apotema
Independientemente del polígono que sea, conociendo la apotema (o el cruce de las mediatrices de dos de los lados del polígono) conoces el centro del polígono. El radio de la circunferencia circunscrita será la distancia de dicho centro a uno de los vértices, que viene a ser la hipotenusa de un triángulo rectángulo del que conoces el ángulo que forma el cateto pequeño con ésta (la mitad del que forman dos lados del polígono) y, por ende, el tercer ángulo, y la longitud del cateto pequeño (la mitad del lado del polígono).
Con todos estos datos se puede conocer la longitud del radio.
he conseguido un avance, pero en otro sentido
ahora tengo esto: http://www.vitutor.net/2/1/images/33.gif
cuando necesito esto otro: http://www.vitutor.net/2/1/images/32.gif
el codigo que tengo es este:
alfa = (360/nlds);
         beta=270 - alfa/2;  //Esto es para que el lado inferior quede paralelo al eje de x
         alfa = alfa*RPG; //RPG = PI/180
         beta = beta*RPG;
         R = (lado / (2*cos(alfa/2)));
         x0=R*cos(beta);
         y0=R*sin(beta);
      
for(int i=1; i<=nlds; i++)
         {   cin.clear();cin.sync();

      //vgLine(x0 , y0 , x1, y1) dibuja una linea de (x0,y0) a (x1,y1)
         vgLine(R*cos(beta), R*sin(beta), R*cos(beta + alfa), R*sin(beta + alfa));   
         cout << "Vertice " << i << " : ("<< R*cos(beta) << " , " << R*sin(beta) << ")" << endl;
         beta = beta + alfa;
      }
8 respuestas