Programmdesign Fraktalgenerator



  • Ich moechte ein Programm zur Generation und Anzeige von Fraktalen schreiben.
    Mein Ansatz:

    class Fractal {
    	public:
    		Fractal ( const Point &p0, const Point &p1, 
    				size_t number_x_pix, size_t number_y_pix,
    				size_t max_iterations, const std::string &name );	
    		virtual ~Fractal ();
    		const unsigned operator() (size_t row, size_t col) const;
    		unsigned getMaxIterations () const { return max_iterations; }
    		size_t getRows () const { return matrix.getRows (); }
    		size_t getCols () const { return matrix.getCols (); }
    		const std::string& getName () const { return fractal_name; }
    		const Point& getFirstPoint () const { return p0; }
    		const Point& getSecondPoint () const { return p1; }
    		size_t* getData () const;
    
    	protected:
    		Matrix <size_t> matrix;
    		Point p0, p1;
    		std::string fractal_name;
    
    	private:
    		size_t max_iterations;
    };
    
    class Apfelmaennchen : public Fractal {
    	public:
    		Apfelmaennchen (const Point &p0, const Point &p1, 
    			size_t number_x_pix, size_t number_y_pix, size_t max_iterations);
    		~Apfelmaennchen ();
    
    	private:
    		virtual void createFractal ();
    		double normQuadrat (double a[2]);
    		unsigned iteration (double zn[2]);
    };
    
    class JuliaSet : public Fractal {
    	public:
    		JuliaSet ( const Point &p0, const Point &p1, 
    			size_t number_x_pix, size_t number_y_pix, size_t max_iterations);
    		~JuliaSet ();
    
    	private:
    		virtual void createFractal ();
    		double normQuadrat (double a[2]);
    		unsigned iteration (double zn[2]);
    };
    

    Spaeter will ich dann noch andere Fraktale generieren!

    Ausserdem moechte ich folgende Struktur aufbauen, um die Daten zu visualisieren:

    MainWindow 
                    /            \
            list <Viewer>     list < FractalCtrl >
                                    /          \
                              ColorAlg        Fractal
    

    Was wuerdet ihr verbessern / anders machen? Oder ist das so okay? Koennte man irgendwelche Muster anwenden, sodass man gleich noch mehr dabei lernt?

    Schoenen Tag noch! 🙂



  • So etwas haben wir mal im Studium gemacht, war echt lustig. Allerdings haben wir die Daten dann auch noch in einer DB abgelegt.

    Erstmal muss ich sagen, das dich deine Basisklasse zu sehr einschränkt. Du kannst nicht alle Fraktale damit erzeugen, z.b. MKVMs, L-Systeme oder das Chaosspiel. Was ist, wenn du mal die Farber ändern willst? Wir haben damals ein System benutzt, das für jeden Parameter einen String definiert hat. Der Wert war auch ein String der jeweils entsprechend umgewandelt wurde. Das war für unserer Zwecke recht praktisch, um die Daten in der DB abzulegen. Um die Übersicht zu bewahren, bilden die Strings eine hierachische Struktur, indem sie als Pfad interpretiert werden. z.b.
    "Iterations"
    "Point1/X"
    "Point1/Y"
    "Point2/X"
    ...

    Wichtig fände ich auch einen mehrstufigen Renderer, um optimale Geschwindigkeit zu erreichen. z.b.
    Init();
    ParseParameter( StringArray );
    ChangeSize( Size )
    Draw();

    Bye, TGGC (Der Held lebt!)[/quote]


Anmelden zum Antworten