• Jueves 28 de Marzo de 2024, 22:15

Autor Tema:   Programacion de fractal: Triangulo Sierpinsky  (Leído 4732 veces)

karolina.s

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Programacion de fractal: Triangulo Sierpinsky
« en: Martes 6 de Mayo de 2014, 10:37 »
0
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: C
  1.  #include <stdio.h>
  2.  
  3. #define NTRIANGULOS 6
  4.  
  5.  
  6.  
  7.  
  8. struct Triangulo
  9. {
  10.     float xA,yA;
  11.     float xB,yB;
  12.     float xC,yC;
  13. };
  14.  
  15. int main(int argc, char *argv[])
  16. {
  17.     struct Triangulo triangulo[NTRIANGULOS];
  18.     int n,m,ntriangulos;
  19.  
  20.     FILE*fout;
  21.     fout=fopen("triangulo.txt","w");
  22.  
  23.     triangulo[0].xA = 0;
  24.     triangulo[0].yA = 0;
  25.     triangulo[0].xB = 1;
  26.     triangulo[0].yB = 0;
  27.     triangulo[0].xC = 0.5;
  28.     triangulo[0].yC = 1;
  29.     ntriangulos=1;
  30.  
  31.  do{
  32.  
  33.     for(n=ntriangulos-1; n>=0&&ntriangulos<NTRIANGULOS; n--)
  34.     {
  35. m=ntriangulos;
  36.         /* segundo triangulo */
  37.         triangulo[m].xA=triangulo[n].xA + (triangulo[n].xB - triangulo[n].xA)/2 ;
  38.         triangulo[m].yA=triangulo[n].yA;
  39.  
  40.         triangulo[m].xB=triangulo[n].xB;
  41.         triangulo[m].yB=triangulo[n].yB;
  42.  
  43.         triangulo[m].xC=triangulo[n].xA + 3*(triangulo[n].xB - triangulo[n].xA)/4;
  44.         triangulo[m].yC=triangulo[n].yA + (triangulo[n].yC- triangulo[n].yA)/2 ;
  45.  
  46.  
  47.         /* tercer triangulo */
  48.         triangulo[m].xA=triangulo[n].xA + (triangulo[n].xB - triangulo[n].xA)/4;
  49.         triangulo[m].yA=triangulo[n].yA + (triangulo[n].yC - triangulo[n].yA)/2;
  50.  
  51.         triangulo[m].xB=triangulo[n].xA + 3*(triangulo[n].xB -triangulo[n].xA)/4;
  52.         triangulo[m].yB=triangulo[n].yA + (triangulo[n].yC -triangulo[n].yB)/2;
  53.  
  54.         triangulo[m].xC= triangulo[n].xC;
  55.         triangulo[m].yC= triangulo[n].yC;
  56.  
  57.  
  58.         /* primer triangulo - inicial */
  59.  
  60.         triangulo[n].xC=triangulo[n].xA + (triangulo[n].xB - triangulo[n].xA)/4;
  61.         triangulo[n].yC=triangulo[n].xA +(triangulo[n].yC - triangulo[n].yA)/2;
  62.  
  63.         triangulo[n].xB=triangulo[n].xA + (triangulo[n].xB - triangulo[n].xA)/2;
  64.         triangulo[n].yB=triangulo[n].yB;
  65.  
  66.         triangulo[n].xA=triangulo[n].xA;
  67.         triangulo[n].yA=triangulo[n].yA;
  68.  
  69.         ntriangulos++;
  70.  
  71.     }
  72.  
  73.  } while(ntriangulos<NTRIANGULOS);
  74.  
  75.  
  76.  for(n=0;n<ntriangulos;n++)
  77.  {
  78.     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);
  79.  }
  80.  
  81.     fclose(fout);
  82.     return(0);
  83. }
  84.  
Codeblocks, lenguaje C

nachete_222

  • Nuevo Miembro
  • *
  • Mensajes: 11
    • Ver Perfil
Re: Programacion de fractal: Triangulo Sierpinsky
« Respuesta #1 en: Jueves 8 de Mayo de 2014, 23:10 »
0
Citar
58.        /* primer triangulo - inicial */
59.
60.        triangulo[n].xC=triangulo[n].xA + (triangulo[n].xB - triangulo[n].xA)/4;
61.        triangulo[n].yC=triangulo[n].xA +(triangulo[n].yC - triangulo[n].yA)/2;

linea 61. (triangulo[n].xA) - esto te va a dar problemas cuando los triangulos no esten en la base.
Si puedes comentar un poco tu código para que sea más facil de leer sería estupendo.

a simple vista hay un par de detalles que no me cuadran muy bien.
1. el triangulo de Sierpinsky es un triangulo "equilatero" y el que tu pones como inicial no lo es.
2. a medida que hacemos iteraciones "se multiplica por 3" el número de triangulos resultantes.
     esto es un progresión geométrica, no se de donde sale el numero 6 para la cantidad de triangulos
     deberian ser 1, 3, 9, 27.... etc. segun numero de iteraciones.
hay alguna razón para que sean 6 ?

Y Si!,  los valores del segundo triángulo los estas machacando con el tercer triángulo, evidentemente si das la misma variable en el tercer triángulo, estas sobreescribiendo los valores que calculaste con el segundo.

creo que la mejor forma de abordar el problema sería con una función que reciba 3 puntos como parámetros
y calcule otros tres. Luego es cuestión de escoger los puntos que van en cada triangulo. Se llama esta función con cada uno de los triangulos de cada una de las iteraciones y podria calcular tantos como se quisiese.

un saludo.
Nacho
« última modificación: Viernes 9 de Mayo de 2014, 01:05 por nachete_222 »

paula.mtez

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Re: Programacion de fractal: Triangulo Sierpinsky
« Respuesta #2 en: Viernes 13 de Mayo de 2016, 11:05 »
0
Hola. Al final has conseguido corregir el código?