Prosíme přihlašte se nebo zaregistrujte.

Přihlašte se svým uživatelským jménem a heslem.
Vaše pomoc je stále potřeba!

Autor Téma: fraktaly (mandelbrotova mnozina)  (Přečteno 11408 krát)

ubuntu luky

  • Host
fraktaly (mandelbrotova mnozina)
« kdy: 08 Května 2008, 11:48:09 »
tak jak si cochnim v tom c++ tak nejdriv sem trosku kouk na opengl a pak sem si umanul ze chci abych si v opengl vykreslil naky fraktaly  :D delam to po prvy a ta matematika je pomerne dost slozita.. tedka konkretne teda ten fraktal mandelbrotova mnozina se to porad snazim pochopit jak to funguje.. porad mi to nechtelo vykreslit (pouzivam knihovnu GLUT coz trosku usnadnuje inicializaci OpenGL ze clovek nemusi vytvaret okna pres Gtk atd)

pak mi to vykreslilo jednou barvou pak sem resil jak se to obarvuje ruznyma barvama  :D trosku sem na to kap ale neni to uplne idealni  :) a hlavne mam porad jenom takovou tu zakladni polohu kdy je videt ten celej fraktal a nechapu jak se dela to ze se to porad "priblizuje" abych vykreslil nejakej detail... nezna to nekdo?  :)

ale je to fakt zabava ty fraktaly.. a hlavne clovek obcas vidi i krasny obrazce moc doporucuju  :)

prikladam obrazek kterej vykreslil jeden profesionalni prgoram  a druhej obrazek je z myho programu  :) ale samozrejme ten profi program ten je vychatanej tam jde prave zoomovat atd...  :P :D




existpierre

  • Host
Re: fraktaly (mandelbrotova mnozina)
« Odpověď #1 kdy: 08 Května 2008, 11:51:29 »
jaka nahoda, citam toto http://vk.upjs.sk/~tuleja/vscience/materialy/mandelbrot/C.htm

len jaksik mi ani za boha nechce nainstalovat javu  >:(

tiez ma zaujima teoria chaosu a chcel som si to spravit len moje znalosti su minimalne, co sa tyka grafiky tak nulove.

ubuntu luky

  • Host
Re: fraktaly (mandelbrotova mnozina)
« Odpověď #2 kdy: 08 Května 2008, 12:05:27 »
ha kouknu na to  :) hele javu nepotrebujes nainstaluj si nakej c++ IDE s g++ kompilatorem.. a pak uz jen doinstalujes nejaky knihovny napriklad OpenGL nebo napriklad Glut poznas to podle hlvaicek ze treba tam je include glut tak zadas do spragvce balicku synaptic glut a tam ti to najde treba libglut a libglutdev nebo jak a tak nainstalujes potrebny knihovny.

a co se tyce c++ a opengl tak opravdu minimum znalosti na to potrebujes ale hlavne jde o tu matematiku a ta mi hlava nebere  :D ti klidne pak tady prilozim zdrojak je to kratoucky fakt jde jen o tu matematiku ale to musi hlavne clovek chapat.

ps takhle vypada udajne ta mandelbrotova mnozina podle wikipedie kdyz se priblizi 60 MILIARDKRAT!  :D
je to fakt krasa ty fraktaly me to prijde jako takovej vesmir sam v sobe..



jinak pokud si chces jen fraktaly prohlizet zadej do synapticu gnofract to je totiz ten profi program a obsahuje plno fraktalu prehazovani barev atd
« Poslední změna: 08 Května 2008, 12:14:43 od ubuntu luky »

existpierre

  • Host
Re: fraktaly (mandelbrotova mnozina)
« Odpověď #3 kdy: 08 Května 2008, 12:14:13 »
no ja som chcel javu len koli ten stranke, uz sa mi to podarilo rozchodit :P

stacilo spravit odkaz z /usr/lib/jvm/java-6-sun-1 .6.0.06/jre/plugin/i386/ns7/libjavaplugin_oji.so do /home/peter/.mozilla/plugins

Ak by si poslal zdrojak bol by som vdacny, bo si vobec neviem predstavit matiku v praxi, teda tie vektory a tak ...teorie by bolo aj jaj jaj :D
« Poslední změna: 08 Května 2008, 12:16:32 od existpierre »

ubuntu luky

  • Host
Re: fraktaly (mandelbrotova mnozina)
« Odpověď #4 kdy: 08 Května 2008, 12:24:06 »
tady posilam zdrojak je to opravdu kratoucke a jednoduche myslim tim hlavne to opengl.. ten matematicky algoritmus jsem pouizil nekoho ciziho protoze natolik sem ten mandelbrot jeste nepochopil to se prave snazim :D jediny co sem pochopil je, jak to trosku obarvit, takze ten muj zakomentovanej kod tam v tom algoritmu to je na obarveni a je muj.. ale neni jeste moc dokonalej protoze samozrejme to souvisi s poctem iteraci to nastaveni barev pres kanal RGB.

mrkni na to... zalezi jestli si dokazes tedka rozchodit nejaky to c++ ide no.

Citace
#include <stdlib.h>
#include <stdio.h>
#include <GL/glut.h>                            // hlavickovy soubor funkci GLUTu a OpenGL


#define PIXMAP_WIDTH    750                      // sirka pixmapy
#define PIXMAP_HEIGHT   550                      // vyska pixmapy
unsigned char bmp[PIXMAP_HEIGHT][PIXMAP_WIDTH][3];// pole s pixely pixmapy


// http://library.thinkquest.org/3493/src/fractal/mandelbrot.c
void mandel( int nx, int ny,                        /* screen size */
        long double xmin, long double xmax,    /* min and max on x axis */
        long double ymin, long double ymax,    /* min and max on y axis */
        unsigned maxiter,
        short bailout = 4
      )
{ short ix, iy;
  unsigned iter;
  long double cx, cy;
  long double x, y, x2, y2, temp;

  for( iy = 0; iy < ny ; iy ++ )
    {
      cy = ymin + iy * ( ymax - ymin ) / ( ny +1 );

      for( ix = 0; ix < nx; ix ++ )
     {
       cx = xmin + ix * ( xmax - xmin ) / ( nx +1 );
       x = y = x2 = y2 = 0.0;
       iter = 0;
       while( iter < maxiter && ( x2 + y2 ) < bailout  )
        {
          temp = x2 - y2 + cx;
          y = 2 * x * y + cy;
          x = temp;
          x2 = x * x;
          y2 = y * y;
          iter++;
       }

                       bmp[iy][ix][0]=iter;                     // RED
                   bmp[iy][ix][1]=0;                        // GREEN
                    bmp[iy][ix][2]=0;                        // BLUE

           /* 
               // snaha o vykresleni jine barvy v blizkosti samotnych prvku mnoziny fraktalu
            if (maxiter-iter<20 && maxiter-iter>0)
            {
                    bmp[iy][ix][0]=iter*7 - (maxiter-iter) + +30; // + maxiter-iter zahrnuje specificky jemnost = prechod
                   bmp[iy][ix][1]=(maxiter-iter)+150;
                   bmp[iy][ix][2]=0;
            } else
   
            // vykresleni ostatnich pixelu
            {
                       bmp[iy][ix][0]=iter*7+30;                     // nastavit barvu pixelu
                   bmp[iy][ix][1]=0;
                   bmp[iy][ix][2]=0;
            }   
            // vykresleni pixelu ktere jsou soucasti primo mnoziny (cernou barvou)
            if (maxiter==iter)
            {
                       bmp[iy][ix][0]=0;                     // nastavit barvu pixelu
                   bmp[iy][ix][1]=0;
                    bmp[iy][ix][2]=0;
            }
           */
         
    }
    }
}

//---------------------------------------------------------------------
// Nastaveni souradneho systemu v zavislosti na velikosti okna
//---------------------------------------------------------------------
void onResize(int w, int h)                     // argumenty w a h reprezentuji novou velikost okna
{
    glViewport(0, 0, w, h);                     // viditelna oblast pres cele okno
    glMatrixMode(GL_PROJECTION);                // zacatek modifikace projekcni matice
    glLoadIdentity();                           // vymazani projekcni matice (=identita)
    glOrtho(0, w, 0, h, -1, 1);                 // mapovani abstraktnich souradnic do souradnic okna
}



//---------------------------------------------------------------------
// Tato funkce je volana pri kazdem prekresleni okna
//---------------------------------------------------------------------
void onDisplay(void)
{
    glClear(GL_COLOR_BUFFER_BIT);               // vymazani vsech bitovych rovin barvoveho bufferu
    glDrawBuffer(GL_FRONT);                     // pixmapa se bude kreslit do predniho barvoveho bufferu
    glPixelStorei(GL_UNPACK_ALIGNMENT, 1);      // zarovnani radku na 1 byte
    glRasterPos2i(0, 0);                        // nastaveni souradnic leveho spodniho rohu pixmapy
    glDrawPixels(PIXMAP_WIDTH, PIXMAP_HEIGHT, GL_RGB, GL_UNSIGNED_BYTE, bmp);
    glFlush();                                  // provedeni a vykresleni vsech zmen
}



//---------------------------------------------------------------------
// Tato funkce je volana pri stlaceni ASCII klavesy
//---------------------------------------------------------------------
void onKeyboard(unsigned char key, int x, int y)
{
    switch (key) {
        case 27:    exit(0);    break;          // pokud byla stlacena klavesa ESC, konec programu
        default:    break;
    }
}


//---------------------------------------------------------------------
// Hlavni funkce konzolove aplikace
//---------------------------------------------------------------------
int main(int argc, char **argv)
{
    glutInit(&argc, argv);                      // inicializace knihovny GLUT
    glutCreateWindow("Fraktaly");// vytvoreni okna pro kresleni
    glutReshapeWindow(750, 550);                // zmena velikosti okna
    glutPositionWindow(300, 200);               // pozice leveho horniho rohu okna
    glutDisplayFunc(onDisplay);                 // registrace funkce volane pri prekreslovani okna
    glutReshapeFunc(onResize);                  // registrace funkce volane pri zmene velikosti okna
    glutKeyboardFunc(onKeyboard);               // registrace funkce volani pri stlaceni klavesy
    mandel(750,550,-2.0,1.0,-1.0,1.0,40);
    glutMainLoop();                             // nekonecna smycka, kde se volaji zaregistrovane funkce
    return 0;                                   // navratova hodnota vracena operacnimu systemu
}

Martin - ViPEr*CZ*

Re: fraktaly (mandelbrotova mnozina)
« Odpověď #5 kdy: 08 Května 2008, 12:50:13 »
Tak takhle mi to nejde přeložit... ale nechápu proč... :(
Open source is gold way... Mint 17.2, Debian 8.1 Jessie| Ubuntu Wiki (návody) | Google vyhledávač | Qt4 návody

ubuntu luky

  • Host
Re: fraktaly (mandelbrotova mnozina)
« Odpověď #6 kdy: 08 Května 2008, 13:02:07 »
co ti to hlasi? zkus prilinkovat s parametrem "-lglut" s knihovnou glut a pokud ji nemas tak otevri synaptic napis tam glut a melo by ti to najit neco jako libglut nebo libglutdev oboji nainstaluj taky opengl pokud nemas.

Martin - ViPEr*CZ*

Re: fraktaly (mandelbrotova mnozina)
« Odpověď #7 kdy: 08 Května 2008, 13:13:03 »
Tak knihovnu mám to je jasný.... s -lglut to jde... v NetBeans jsem to ale nepřeložil.... :(

PS: chce to vypnout compiz!

--- tak už jsem přišel kde je i command line v NetBeans ;)
« Poslední změna: 08 Května 2008, 13:15:52 od Martin - ViPEr*CZ* »
Open source is gold way... Mint 17.2, Debian 8.1 Jessie| Ubuntu Wiki (návody) | Google vyhledávač | Qt4 návody

ubuntu luky

  • Host
Re: fraktaly (mandelbrotova mnozina)
« Odpověď #8 kdy: 08 Května 2008, 13:40:59 »
takze to jde? no to Netbeans pusti stejne g++ kompiler ne? a to je pak sejny jak u me.. me to funguje i s compizem  ;) :D ale je fakt ze nektery veci jsou se zapnutmy compizem bugly treba kdyz maximalizuju okno tak se to vykresli jen ve druhy pulce treba.. ale konkretne ty fraktaly tenhle program mi funguje i se zaplym compizem

Martin - ViPEr*CZ*

Re: fraktaly (mandelbrotova mnozina)
« Odpověď #9 kdy: 08 Května 2008, 13:43:55 »
Mně to okno není vůbec vidět se zaplým compizem.... to je jasný že IDE využívají GNU g++, ale nevěděl jsem kam kliknout, abych nastavil ten parametr  :P
Open source is gold way... Mint 17.2, Debian 8.1 Jessie| Ubuntu Wiki (návody) | Google vyhledávač | Qt4 návody

ubuntu luky

  • Host
Re: fraktaly (mandelbrotova mnozina)
« Odpověď #10 kdy: 08 Května 2008, 14:06:39 »
ok supr  :D ted jeste muzes prijit na to jak se dela to zoomovani  :D ale taky na to musim prijit ale nejdriv se musim poradne psychicky pripravit nez zacnu premejslet chapes  :D

existpierre

  • Host
Re: fraktaly (mandelbrotova mnozina)
« Odpověď #11 kdy: 10 Května 2008, 19:33:11 »
Tak knihovnu mám to je jasný.... s -lglut to jde... v NetBeans jsem to ale nepřeložil.... :(

PS: chce to vypnout compiz!

--- tak už jsem přišel kde je i command line v NetBeans ;)

pls kde sa v netbeans zadava ten parameter, aby som to mohol zkompilovat?

ubuntu luky

  • Host
Re: fraktaly (mandelbrotova mnozina)
« Odpověď #12 kdy: 11 Května 2008, 11:17:39 »
zkusim si stahnout ten netbeans ale pokud se mi to nepodari nainstalovat coz asi ne jeslti to bezi na jave eclipse se mi taky nepodarilo tak musis nekde najit compiler settings nebo respektive linker settings nebo nejakou sekci tam kde bys zadaval parametr a tam to zadas no.. kdyz ti to nepude tak prinejhorsim poiuzij geany tam to jde v pohode a geany nic extra nevyzaduje. kdyztak ti to rekne martin :)

hm tak ja ti s tim neporadim ten netbeans asi nechce zkompilovat samotnej skript ale jedine projekt a tam zas chce makefile nic takovyho sem nepotreboval ani v geany ani v code::blocks.
« Poslední změna: 11 Května 2008, 11:41:16 od ubuntu luky »

existpierre

  • Host
Re: fraktaly (mandelbrotova mnozina)
« Odpověď #13 kdy: 11 Května 2008, 11:49:25 »
jop, v geany to ide dik, no pokusim sa tomu pochopit :D

len to mam tmave
« Poslední změna: 11 Května 2008, 13:18:47 od existpierre »

ubuntu luky

  • Host
Re: fraktaly (mandelbrotova mnozina)
« Odpověď #14 kdy: 11 Května 2008, 13:59:13 »
jj mas to tmave protoze v tom kodu je vychozi pocet iteraci 40 a potom v tom algoritmu se nastavuje barva v kanalu red podle poctu iteraci takze vlastne nastavis barvu RGB 40,0,0 takze se to jevi tmavy.. takze bud odkomentujes tu cast jak tam je ode me ta ale neni taky moc inteligentni protoze kdyz zvysis pocet iteraci tak to obarvuje dost nepredvidatelne.. barvy RGB se obarvujou v limitu 255/255/255 takze tohle se tam musi nejak zohlednit  ;) jinak sem uz nasel i upravu aby to zoomovalo respektive vykreslovalo jinou cast.

nainstaluj si i program gnofract pres synaptic abys to mel s cim porovnavat.. tam naprikald vidis pocet iteraci pri priblizeni.. napriklad kdy je pocet iteraci 4000 atd atd. v gnofractu kdyz zmacknes ctrl+f tak se ti objevi takovy menu kde prave vidis/nastavujes jak to je ty iterace pozice atd.

jinak co se tyka toho programu v c++ tak tam jsou v podstate dve veci.. zaridit to zoomovani abys videl i jiny casti a druha vec pohrat si s tim vykresleni. naprikald tady http://en.wikipedia.org/wiki/Mandelbrot_set wikipedie zminuje nekolik typu algoritmu na vykresleni.. vsimni si tech obrazku ktery poiuzivaj ten smoothing ze to vypada tak bohate na barvy a plynuly prechody. ten smoothing pouziva prave i gnofract (krome toho teda aplikuje i nejaky antialiasing filtry)
« Poslední změna: 11 Května 2008, 14:07:18 od ubuntu luky »

 

Provoz zaštiťuje spolek OpenAlt.