Foro de elhacker.net

Programación => Programación General => Mensaje iniciado por: gonzas144 en 7 Junio 2013, 06:22 am



Título: Algoritmo para procesar una circunferencia
Publicado por: gonzas144 en 7 Junio 2013, 06:22 am
Hola gente, necesitaria que me den una mano en un proyecto de Python que estoy haciendo. (ubique este topic en Programacion General ya que me gustaria discutir el algoritmo en pseudocodigo, despues yo me encargo de pasarlo a Py).

La idea es, yo tengo una circunferencia de Radio R, la cual esta a su vez dividida en N circunferencias menores. Me gustaria poder hacer dos cosas.

a). Mapear toda la circunferencia de forma que quede dividida o grillada por rectas.
b). Una vez grillada conseguir los puntos (x,y) de cada posicion de la grilla ,como si fuese una matriz pero con forma de circulo.

El problema que se me presenta es que , es facil sacar el punto de partida, pero no se como sacar los puntos x,y restantes para poder crear todas las rectas.

Imagenes de ejemplo:

Mi proyecto:

(http://s21.postimg.org/ap3ebyldj/Pantallazo_3.png)

Como me gustaria que quede

(http://www.youbioit.com/files/images/harddisk.jpg)

Para generar una linea necesito los parámetros Punto(x,y) de inicio y Punto(x,y) de fin. El problema es que al moverme dentro del circulo el punto x,y de fin también se mueve, no se con que función trigonométrica calcular esos valores.

Una vez que haya grillado todas las circunferencias la idea seria obtener los puntos x,y intermedios de cada 'sector' , generando asi un mapa del gráfico en pixeles.

No se si se entendió la idea

Gracias de antemano.


Título: Re: Algoritmo para procesar una circunferencia
Publicado por: lapras en 12 Junio 2013, 15:30 pm
¿Entonces tu problema es como dibujar las rectas?¿Digamos que quieres obtener los diferentes puntos de destino(porque el origen es siempre el centro)?
Pues a ver, para dibujar las rectas lo primero que tienes que hacer es decidir en cuantas partes quieres dividir el circulo(llamémosle p).
La distancia entre una recta y la siguiente en ángulo será a=(360/p)º.
Supongamos que el centro del círculo esta en (0,0).
El punto que buscamos será (r*cos(k*a), r*cos(k*a)). r es el radio y k es una constante entera.
Vayamos al código. El código que voy a poner es un pseudocódigo parecido a C(lo siento no se python).
Código
  1. struct Punto{
  2. int x;
  3. int y;
  4. };
  5.  
  6.  
  7. Punto origen={0, 0};
  8. a=360/p;
  9. for(int i=0;i<p;i++){
  10. Punto destino={r*cos(a*i), r*sin(a*i)};
  11. dibujarRecta(origen, destino);
  12. }
  13.  

Eso es lo que entiendo de tu pregunta a)
La pregunta b) no la llego a entender porque no se a que puntos te refieres. ¿Quieres decir todos los puntos que estan dentro de un sector?


Título: Re: Algoritmo para procesar una circunferencia
Publicado por: luiggy2 en 14 Junio 2013, 00:06 am
Solo añadir un aporte:

Una recta no sólo se puede representar con el punto origen y el punto final.
La ecuación de una recta viene dada por a*x+b*y+c=0. Luego una recta la
puedes guardar con una terna <a,b,c> (mi recomendación personal es que
uses b=0.0 para verticales, y para el resto uses b=1.0 variando a y c para que
sigan el convenio).
Código
  1. struct recta{
  2. float a,b,c;
  3. };

De igual manera, una circunferencia viene dada por (x-e)^2+(y-f)^2=r^2,
donde <e,f> es el centro y r el radio.
Código
  1. struct circle{
  2. float e, f, r;
  3. }
De esta manera, si quieres calcular el punto de corte entre una recta y una circunferencia,
sólo tienes que resolver un sistema de ecuaciones (ten en cuenta que te saldrán dos
soluciones)

Un saludo!