Fórum Ubuntu CZ/SK
Ubuntu pro osobní počítače => Software => Příkazový řádek a programování pro GNU/Linux => Téma založeno: ubuntu luky 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
(http://img182.imageshack.us/img182/981/11430050ba9.th.png) (http://img182.imageshack.us/my.php?image=11430050ba9.png)(http://img170.imageshack.us/img170/9786/obrazovkafraktalydw1.th.png) (http://img170.imageshack.us/my.php?image=obrazovkafraktalydw1.png)
-
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.
-
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..
(http://img59.imageshack.us/img59/508/mandelzoom14satellitejuad0.th.jpg) (http://img59.imageshack.us/my.php?image=mandelzoom14satellitejuad0.jpg)
jinak pokud si chces jen fraktaly prohlizet zadej do synapticu gnofract to je totiz ten profi program a obsahuje plno fraktalu prehazovani barev atd
-
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
-
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.
#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
}
-
Tak takhle mi to nejde přeložit... ale nechápu proč... :(
-
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.
-
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 ;)
-
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
-
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
-
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
-
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?
-
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.
-
jop, v geany to ide dik, no pokusim sa tomu pochopit :D
len to mam tmave
-
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 (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)