/
Inicio :: Foros

 F.A.Q.F.A.Q.                  Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   

Programacion de fractal: Triangulo Sierpinsky

 
      Índice del Foro elrincondelc.com -> Principiantes C/C++
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
karolina.s



Registrado: 06 May 2014
Mensajes: 2

MensajePublicado: 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: 7516
Ubicación: Mexico

MensajePublicado: 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

MensajePublicado: 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 Smile

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
      Índice del Foro elrincondelc.com -> Principiantes C/C++
Página 1 de 1Todas las horas están en GMT - 8 Horas

 
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

(c) ElRincondelC.com

Un proyecto de UrlanHeat.com