| Ver tema anterior :: Ver siguiente tema | | Autor | Mensaje |
|---|
karolina.s
Registrado: 06 May 2014 Mensajes: 2
| Publicado: 06/05/2014 1:26 am | | | Título: Programacion de fractal: Triangulo Sierpinsky |
| Hola a todos! Necesito ayuda con un programa que he escrito para generar el triangulo de Sierpinsky. El caso es que el ordenador lee solo el tercer subtriangulo (arriba) y el primero (abajo izq.) y completamente ignora el segundo (abajo der.). Puede ser por que las coordenandas para los dos subtriangulos se llaman igual (triangulo[m].xA ... etc)? Como puedo arreglar este problema? Otro problema que tengo es que necesito que la division del triangulo en tres se apique a TODOS los nuevos triangulos formados ... por lo que estoy viendo ahora tengo la sensacion que solo se me esta dividiendo el de abajo izq.!ARGGGGG! Muchas gracias de antemano!
| Código: | #include <stdio.h>
#define NTRIANGULOS 2
struct Triangulo { float xA,yA; float xB,yB; float xC,yC; };
int main(int argc, char *argv[]) { struct Triangulo triangulo[NTRIANGULOS]; int n,m,ntriangulos;
FILE*fout; fout=fopen("triangulo.txt","w");
triangulo[0].xA = 0.0; triangulo[0].yA = 0.0; triangulo[0].xB = 1.0; triangulo[0].yB = 0.0; triangulo[0].xC = 0.5; triangulo[0].yC = 1.0; ntriangulos=1.0;
do{
for(n=ntriangulos-1; n>=0&&ntriangulos<NTRIANGULOS; n--) { m=ntriangulos; /* segundo triangulo */ triangulo[m].xA=triangulo[n].xA + (triangulo[n].xB - triangulo[n].xA)/2.0 ; triangulo[m].yA=triangulo[n].yA;
triangulo[m].xB=triangulo[n].xB; triangulo[m].yB=triangulo[n].yB;
triangulo[m].xC=triangulo[n].xA + 3.0*(triangulo[n].xB - triangulo[n].xA)/4.0; triangulo[m].yC=triangulo[n].yA + (triangulo[n].yC- triangulo[n].yA)/2.0 ;
/* tercer triangulo */ triangulo[m].xA=triangulo[n].xA + (triangulo[n].xB - triangulo[n].xA)/4.0; triangulo[m].yA=triangulo[n].yA + (triangulo[n].yC - triangulo[n].yA)/2.0;
triangulo[m].xB=triangulo[n].xA + 3*(triangulo[n].xB -triangulo[n].xA)/4.0; triangulo[m].yB=triangulo[n].yA + (triangulo[n].yC -triangulo[n].yB)/2.0;
triangulo[m].xC= triangulo[n].xC; triangulo[m].yC= triangulo[n].yC;
/* primer triangulo - inicial */
triangulo[n].xC=triangulo[n].xA + (triangulo[n].xB - triangulo[n].xA)/4.0; triangulo[n].yC=triangulo[n].xA +(triangulo[n].yC - triangulo[n].yA)/2.0;
triangulo[n].xB=triangulo[n].xA + (triangulo[n].xB - triangulo[n].xA)/2.0; triangulo[n].yB=triangulo[n].yB;
triangulo[n].xA=triangulo[n].xA; triangulo[n].yA=triangulo[n].yA;
ntriangulos++;
}
} while(ntriangulos<NTRIANGULOS);
for(n=0;n<ntriangulos;n++) { fprintf(fout,"%g\t%g\n%g\t%g\n%g\t%g\n",triangulo[n].xA, triangulo[n].yA, triangulo[n].xB, triangulo[n].yB, triangulo[n].xC, triangulo[n].yC); }
fclose(fout); return(0); }
|
Code blocks, lenguaje C |
| | Volver arriba | |  | rir3760

Registrado: 01 Oct 2004 Mensajes: 7527 Ubicación: Mexico
| Publicado: 06/05/2014 6:51 am | | | Título: |
| Hola
Bienvenido a los foros. Por favor lee sus reglas.
----
Los problemas principales con tu programa son dos.
El primero se debe a que declaras el array con un numero de elementos igual a NTRIANGULOS y este es igual a dos, en otras palabras en el array solo puedes almacenar la información de dos triángulos.
El segundo es el que comentas: el segundo triangulo es "triangulo[m]" y el tercero ... también, eso resulta en que la información (coordenadas) del segundo se sobrescriben con las del tercero, hay que utilizar indices distintos.
Por ultimo si quieres que por cada triangulo se genere un conjunto de tres triángulos ello se puede hacer con una función recursiva (o iterativa con una pila) pero ello depende de si ya vieron esos temas (recursion y pilas) en clase.
Un saludo _________________ C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly. -- Kernighan & Ritchie, The C programming language |
| | Volver arriba | |  | karolina.s
Registrado: 06 May 2014 Mensajes: 2
| Publicado: 06/05/2014 9:03 am | | | Título: |
| | rir3760 escribió: | Hola
Bienvenido a los foros. Por favor lee sus reglas.
----
Los problemas principales con tu programa son dos.
El primero se debe a que declaras el array con un numero de elementos igual a NTRIANGULOS y este es igual a dos, en otras palabras en el array solo puedes almacenar la información de dos triángulos.
El segundo es el que comentas: el segundo triangulo es "triangulo[m]" y el tercero ... también, eso resulta en que la información (coordenadas) del segundo se sobrescriben con las del tercero, hay que utilizar indices distintos.
Por ultimo si quieres que por cada triangulo se genere un conjunto de tres triángulos ello se puede hacer con una función recursiva (o iterativa con una pila) pero ello depende de si ya vieron esos temas (recursion y pilas) en clase.
Un saludo |
Hola, gracias por responderme 
Entonces cambiando los indices para el tercer triangulo de triangulo[m] a triangulo[p] (por ejemplo), deberia arreglar el problema de la sobreescritura, no?
Y si quisiera hacerlo con una funcion recursiva, que tendria que anadir al programa actual?
Claro, entiendo lo el array, puse 2 por poner algun numero. Lo he estado probando con distintos numeros .... por ejemplo con 3 me salen 3 triangulos, si, pero uno dentro del otro dentro del otro (cuando lo que necesito son tres triangulos conectados por sus vertices dentro del triangulo inicial).
Un saludo |
| | Volver arriba | |  | | |
| No puede crear mensajes No puede responder temas No puede editar sus mensajes No puede borrar sus mensajes No puede votar en encuestas
|
|
| |