DEMO.DESIGN
Frequently Asked Questions
 
оглавление | demo party в ex-СССР | infused bytes e-mag | новости от ib/news | другие проекты | письмо | win koi lat

следующий фpагмент (2)
- [92] Pascal talks (2:5030/84) ------------------------- SU.PASCAL.MODULA.ADA - Msg : 33 of 42 From : Aziz Saidrasulov 2:5085/13.11 04 May 95 11:54:00 To : Mike Aizatsky Subj : Фрактальные структуры и программка для папоротника! -------------------------------------------------------------------------------- .MSGID: 2:5085/13.11 2fa8c0a1 .REPLY: 2:461/21.100 2f8fceb9 .TID: FastEcho 1.30/g 549330833 Hello Mike! VK>> Так вот . Все это очень здорово и можно по#$%$ся со всем этим, но VK>> может кто-нибудь уже.. Хотелось :( бы увидеть реальную работу всей VK>> этой кухни, хотя для треугольника Сьерпинского алгоритм у меня есть, VK>> но это совсем не то. А вот с листом (АБАЛДEHHЫЙ 8O ) папоротника - VK>> шо-то мудренное или я торможу. Да ничего оказывается мудренного. Привожу программку, она такая маленькая что даже удивительно что она может что нибудь нарисовать. Она была опубликована в PC Magazine, на бейсике. Hу я перевел короче. {---------------------------------------------------------------------------} program Fract; { remaked by A.Saidrasulov } uses Graph,Crt; var Dt,M : integer; R,A,B,C,D,E,F, NewY,NewX,X,Y : real; begin Dt := Detect; InitGraph(Dt, M,''); Randomize; X := 0; Y := 0; repeat R := Random; if R>0.93 then begin A := -0.15; B := 0.28; C := 0.26; D := 0.24; E := 0; F := 0.44; end else if R>0.86 then begin A := 0.2; B := -0.26; C := 0.23; D := 0.23; E := 0; F := 1.6; end else if R>0.01 then begin A := 0.85; B := 0.02; C := -0.02; D := 0.85; E := 0; F := 1.6; end else begin A := 0; B := 0; C := 0; D := 0.16; E := 0; F := 0; end; NewX := A*X + B*Y + E; NewY := C*X + D*Y + F; X := NewX; Y := NewY; PutPixel(Round(X*50)+100,Round(Y*50)+50, Green); until(Keypressed); CloseGraph; end. {----------------------------------------------------------------------} Кстати сама статья где она публиковалась именно посвящена тому какая это круть фрактальные алгоритмы и как же они устроены. Hу и обьяснение ограничивается глубокомысленным рассуждением о том что вот смотрите какая простая программка рисует такую сложную картинку и значит как легко можно сжать подобную картинку если она встретится в реальности. Hу и выплывают коэфициенты сжатия в 500 раз. Меня разумеется такие доводы совершенно ни в чем не убедили, но картинка действительно красивая. MA> А если тебя это интересует, то: MA> 1. Я этим занимался и где-то были исходники попоротника и MA> Мандельброта (КРУТАААЯ ВЕСЧ). 2. Есть программа (архив ок. 150 Кб), к-я MA> генерит около 100 фракталов (в т.ч. и трехмерных) и очень очень быстро. А у меня болтатлась какая-то программка под винды. Hо довольно тормозная. Того же Мандельброта на 640x480 рисовала минут наверное пять. Aziz
следующий фpагмент (3)|пpедыдущий фpагмент (1)
- [91] Computer Graphics (2:5030/84) ----------------------------- SU.GRAPHICS - Msg : 13 of 14 From : Khrolenko Pavel 2:5045/21.9 25 Apr 96 20:43:00 To : All Subj : Морозные узоры -------------------------------------------------------------------------------- Hi All! Тута многие просили всяческие алгоритмы строящие фрактальные объекты. Вот представляю вашему вниманию алгоритм рисующий биоморф ( так по мойму это называется ). Разбираться в нем времени не было ( сессия на носу ), так что я его просто передрал из тетради. Hадеюсь пинать не будете. :) Z - комплексное число || - здесь мдодуль C = 0.5 + i0.0 // C - должно быть не большое for j = 1 to 100 for k = 1 to 100 // Вычисляем Z0 - центр квадрата в пределах которого мы строим // Re(Z0) = -1.5 + 0.03j - например таким образом // Im(Z0) = -1.5 + 0.03k Z = Z0 for n = 1 to 10 Z = Z^3 + C // - рабочая формула if( Re(Z) > 10 or Im(Z) > 10 or |Z| > 10 ) // то выйти из цыкла по n next if( |Re(Z)| < 10 or |Im(Z)| < 10 ) // построить Plot( j, k ) черным цветом else // построить Plot( j, k ) белым цветом next next // а место рабочей формулы можно подставлять след-ие формулы : 1) sin(Z) + Z^2 + C; 2) sin(Z) + e^Z + C; 3) Z^Z + Z^6 + C. Литература по фракталам : 1) Смирнов Б.М. "Физика фрактальных кластеров" * 2) "Фракталы в физике" Под редакцией Л.Пьетронеро и Э.Тозатти ( Труды 4 международного симпозиума по фракталам в физике ). К слову : ежели кому очень нужна исчерпывающаа инф-ия по фракталам, то известно что в RealCom-е есть эха посвященная этим делам. With best regards,Pavel. --- * Origin: Arakis_Station (4232-316253) (2:5045/21.9)
следующий фpагмент (4)|пpедыдущий фpагмент (2)
F R A C T A L S - by schwartz - - what's behind it? v1.0- Hello, world! Some people have asked me about the techniques in my 4k intro Fractals, so I wrote this little document to share my knowledge with you all. My english and writing abilities are a bit limited, so please don't blame yourself if you think this text goes beyond your comprehension. And please, if someone understands any of the things described in this document, write a better document and send it to me! - DESERT - This is a simple flame-like bitmap effect, but with a neat palette looks quite nice. Each line is based on the previous line so that the color for every pixel is defined by taking the average of the two pixels above it and adding a little random number to it. In pseudocode: for y = 1 to maxlines { for x = 1 to 320 { color = getpixel(x,199) + getpixel(x+1,199) + random(-8..7); putpixel(x,200,color); } copy_screen_one_line_up; } The scrolling was originally done in hardware, but the vga 64kb wraparound in mode 13h doesn't seem to work on some vgas (including the compo machine) and I had to change it to a rep movsw -copy. Is that a glitch in the svga adapters or just a feature that works only on plain vga cards and some svgas (like mine)? - FRACTAL WOBBLING - Both of the wobblings use a 128x128 bitmap that were calculated during the 'loading...' message. The stretching is done by adding some sine values to the bitmap cordinates, and cycling through the sine table. - PLASMA INTERFERENCE (?) - This effect uses two 128x128 bitmaps as height maps. The bitmaps are calculated by using simple sinetable plasma. The colors in the bitmaps represent different heights on the screen. The other bitmap is colored cyan, while the other is gray. When the two bitmaps intersected, we always take pixel from the bitmap that is closer to us (has the highest color). The shading is done by taking the difference of two adjacent pixels and adjusting according to the height. Trying to do pseudocode: for y = 1 to 200 { for x = 1 to 320 { if bitmap1[x,y]>bitmap2[x,y] { color = bitmap1[x,y] - bitmap1[x-1,y] + (bitmap1[x,y]/8); } else { color = bitmap2[x,y] - bitmap2[x-1,y] + (bitmap2[x,y]/8); } putpixel(x,y,color); } } - REALTIME FRACTAL ZOOMING - Uhh, this is the hardest one to explain. Firstly, the screen redrawing is done a bit like the good old lense effect. What we have is a mirrored 320*100 array of word indexes to a 256*256 bitmap. The coordinate axes go a bit like the longitudes and latitudes at the north pole. First axis (longitude) goes straight away from the origo, and the second axis (latitude) goes in a circle around the origo. With these axes we can rotate the bitmap by altering the second coordinate, and zoom in or out the bitmap by altering the first coordinate. Now it's just a matter of calculating the bitmap correctly so that it will look right on our coordinate system. Every time we zoom one step in, each latitude grows a bit and a new one is added to the center of the screen. So, every step we'll need to add one latitude to the map. That's done by calculating the fractal along a circular path, so that every time the circle is a bit smaller than before. Hence, real time fractal zooming! (anybody read this far?) Pseudocode might be easier: repeat { for latitude = 1 to 256 { x = sin(latitude/128*pi) * zoomrate y = cos(latitude/128*pi) * zoomrate bitmap[longitude,latitude] = fractal(x,y); } draw_bitmap; longitude++; zoomrate=zoomrate * 0.95; } until end_of_zoom; By the way, with this technique, each new frame takes just 256 bytes, so you could put, for example a 4096 frames long fractal zoomer in just 1MB uncompressed! (well using just rle should pack it to some 300kb at most, haven't tried the precalculation) - FRACTAL CALCULATION - I'll include the assembly source code of my fractal calculation routine in here, because it's mostly from fractint sources. (thanks stonesoup group!) Fractals are nice, use them, but don't overuse! So here comes: MAXITER EQU 255 FUDGEFACTOR EQU 27 manx dd ? many dd ? xpos dd ? ypos dd ? k dw ? ; ; Calculate Mandelbrot or Julia fractal ; calc_fractal: push bx push di mov k,MAXITER mov esi,manx mov edi,many cmp fractaltype,0 ;zero=mandelbrot, nonzero=julia jne juliaparams mov ecx,esi mov ebp,edi jmp kloop juliaparams: mov ecx,julix mov ebp,juliy kloop: mov eax,esi imul esi shrd eax,edx,FUDGEFACTOR shr edx,FUDGEFACTOR-1 jne kloopend1 mov ebx,eax mov eax,edi imul edi shrd eax,edx,FUDGEFACTOR shr edx,FUDGEFACTOR-1 jne kloopend1 add eax,ebx add ebx,ebx sub ebx,eax cmp eax,4 shl FUDGEFACTOR jae kloopend1 mov eax,edi imul esi shrd eax,edx,FUDGEFACTOR-1 add eax,ebp mov edi,eax add ebx,ecx mov esi,ebx dec k jnz kloop kloopend1: mov ax,k ;return color in ax pop di pop bx ret - CONTACTING ME - Thanks for all the offers, but I don't need a group anymore, I'm joining one already. I don't announce it yet as it isn't still official. But anyway, if you just want to tell or ask me anything, you're welcome to do it by email to: schwartz@cute.fi or by snailmail to: Mikko Reinikainen Penkaskuja 11 03100 NUMMELA FINLAND
следующий фpагмент (5)|пpедыдущий фpагмент (3)
- Usenet echoes (21:200/1) -------------------------- COMP.GRAPHICS.ALGORITHMS - Msg : 62 of 74 From : jar92@ecs.soton.ac.uk 2:5030/315 08 Feb 96 13:30:12 To : All 13 Feb 96 04:37:58 Subj : Re: How to build a fractal plasma? -------------------------------------------------------------------------------- X-RealName: Jon Rijk In article <31178304.167E@mitre.org>, Carl D. Burke <cburke@mitre.org> wrote: >Flop wrote: >> I would like to know how those fractal plasma's are generated. >Look for references to "midpoint subdivision", or something like that. Indeed, the code below does this, but is not recursive like is often described, it also wrapsaround. It does suffer horizontal and vertical artifacts, which I noticed do not occurs in Fractint's plasma, but goes a lot faster, though map sizes are restricted to powers of 2. For landscapes etc, just select the desired palette. Hope this helps void GenMap(unsigned char *map, int size, int posinit, int varinc) { unsigned char *ym0, *ym1, *ym2; int val, sum, rt; int off, pos, var; int x, y, xt; srand(time(NULL)); var=0; *map=rand()&0xFF; for(off=size, pos=INTLSL-posinit; off>1; off=off>>1) { for(y=0; y<size; y+=off) { ym0=map + y*size; ym1=map + (y+(off>>1))*size; ym2=map + ((y+off)&(size-1))*size; for(x=0; x<size; x+=off) { sum=0; xt=(x+off)&(size-1); val=*(ym0+x) + *(ym0+xt) + 1; val=(val>>1) + ((rt=((rand()<<RNDLSL)>>pos))<0?rt:rt+1); if(val<0) val=0 -val; if(val>255) val=510-val; sum+=val; *(ym0+x+(off>>1)) = val; val=*(ym0+x) + *(ym2+x) + 1; val=(val>>1) + ((rt=((rand()<<RNDLSL)>>pos))<0?rt:rt+1); if(val<0) val=0 -val; if(val>255) val=510-val; sum+=val; *(ym1+x) = val; val=*(ym2+x) + *(ym2+xt) + 1; val=(val>>1) + ((rt=((rand()<<RNDLSL)>>pos))<0?rt:rt+1); if(val<0) val=0 -val; if(val>255) val=510-val; sum+=val; val=*(ym2+xt) + *(ym0+xt) + 1; val=(val>>1) + ((rt=((rand()<<RNDLSL)>>pos))<0?rt:rt+1); if(val<0) val=0 -val; if(val>255) val=510-val; sum+=val; val=((sum+2)>>2) + ((rt=((rand()<<RNDLSL)>>pos))<0?rt:rt+1); if(val<0) val=0 -val; if(val>255) val=510-val; *(ym1+x+(off>>1)) = val; } } pos+=(var>>8); var+=varinc; if(pos>INTLSL-2) pos=INTLSL-2; } } -- Jon Rijk If nothing seems to be going wrong you have overlooked something! jar92@ecs.soton.ac.uk Murphy's 3rd Law http://whirligig.ecs.soton.ac.uk/~jar92
следующий фpагмент (6)|пpедыдущий фpагмент (4)
----------------------------------------------------------------------------- - [23] Usenet echoes (21:200/1) --------------------- COMP.GRAPHICS.ALGORITHMS - Msg : 31 of 39 From : kaoskat@dcs.qmw.ac.uk 2:5030/144.99 19 Mar 94 13:44:00 To : All Subj : Re: Looking for Mandelbrot/Julia algorithms -------------------------------------------------------------------------------- I don't know if you're after 'clever' algorithms, or just the basics: Key is function to calculate no. of iterations till 'escape' for a point z in complex plane (-2<=Re z, Im z<=2) e.g. int Mandel(float x, float y,int maxiterations) { float i,r,a,b; int iter; i=r=iter=0; do { a=r*r;b=i*i; i=2*i*r+y; r=a-b+x; } while ((++iter<maxiterations) && (a+b<4)); return iter; } Here x and y are real, imaginary parts of point, maxiterations will determine accuracy as you zoom in. (higher maxiterations is the better, but will take longer). To use this function, you just need to decide what region of the set you want to look at, and map between screen co-ords and that region. So, if you want to look at area bounded by minr<= Re z <maxr, mini<=Im z < maxi, you'd do something like for (i=0;i<pixels_across;i++) { real=minr+(i*(maxr-minr))/pixels_across; for (j=0;j<pixels_down;j++) { imag=mini+(j*(maxi-mini))/pixels_down; value=Mandel(real,imag,256); colour=ConvertValueToColourUsingSomeSchemeOrOther(value); SetPixel(i,j,colour); } } N.B. all code written off the top of my head - don't guarantee it's correct. First function is valid 'C' code, second is more like psuedo-code but is essentially correct. If this is the kind of thing you want, let us know and I'll try to give more details. ---
следующий фpагмент (7)|пpедыдущий фpагмент (5)
- Usenet echoes (21:200/1) -------------------------- COMP.GRAPHICS.ALGORITHMS - Msg : 18 of 21 From : gistar@io.org 2:5030/144.99 11 May 94 21:00:48 To : All 14 May 94 02:57:06 Subj : Request - fractal triangl -------------------------------------------------------------------------------- X-RealName: Edward Lam -=> Quoting Gessler@alife.santafe.edu to All <=- Ge> Can anyone direct me to an algorithm or image file for (Who's it's) Ge> Triangle, the fractal triangle with imbedded self-similar triangles Ge> receeding infinitely? Well, out of boredness last night, I wrote the following program : (I'm serious! .... It uses the "Chaos Game" to do it) DECLARE FUNCTION RndX% () DECLARE FUNCTION RndY% () DEFINT A-Z TYPE pnt x AS INTEGER y AS INTEGER END TYPE OPTION BASE 1 DIM pt(3) AS pnt, curpt AS pnt SCREEN 12 CLS RANDOMIZE TIMER 'Seed random number generator FOR i = 1 TO 3 'The points can be given fixed initial positions pt(i).x = RndX 'But I'll just give them random co-ords for variety pt(i).y = RndY NEXT x = RndX y = RndY DO PSET (x, y), 15 'Plot pixel i = INT(RND * 3) + 1 'Pick random number from 1 to 3 x = x + (pt(i).x - x) / 2 'Move halfway towards pt(i) y = y + (pt(i).y - y) / 2 LOOP WHILE INKEY$ = "" 'Keep looping until key pressed FUNCTION RndX RndX = INT(RND * 640) + 1 '640 is screen width in pixels END FUNCTION FUNCTION RndY RndY = INT(RND * 480) + 1 '480 is screen height in pixels END FUNCTION ... Desk: A large wastebasket with drawers and a phone -$- Blue Wave/QWK v2.10
следующий фpагмент (8)|пpедыдущий фpагмент (6)
- [23] Demo/intro making and discussion (2:5030/84) -------------- DEMO.DESIGN - Msg : 43 of 44 From : Serguey Zefirov 2:5020/313.9 11 Jul 96 14:34:00 To : Ruslan Zalata Subj : One more q. on fractales -------------------------------------------------------------------------------- Zdorovenki bulji,(Hi! in other words) Ruslan! RZ> спустится до низов высших чайников и да осветит нас знаниями своими о RZ> том, как эти ядpеные фpакталы _пpогpаммить_ ? Казалось бы, такая RZ> пpостая вещь, Z(n+1)=Z(n)^2+C, но... КАК ЕЕ, ГАДОСТЬ ТАКУЮ, HА ЭКРАH RZ> ПОЛОЖИТЬ? Взглянь ниже. Там эта самая Z=Z**2+C в тpюколоpе. Писано только что, но самому понpавилось. ;) -------------------------------8<------------------------------------ {$N+,E-} uses gr16m; function mandel(xx,yy:integer):integer; var it:integer; zr,zi:double; cr,ci:double; tr,ti:double; begin cr:=(xx-160)/160; ci:=(yy-100)/100; zr:=0; zi:=0; it:=0; while ((sqr(zr)+sqr(zi))<2) and (it<1000) do begin tr:=zr*zr-zi*zi+cr; ti:=2*zr*zi+ci; zr:=tr; zi:=ti; inc(it); end; if it>=1000 then it:=0; mandel:=it; end; function getc(c,divsr:integer):integer; begin c:=c div divsr; c:=c mod 10; getc:=round(c*255/10); end; var x,y,c:integer; begin initg16m; for x:=0 to 319 do begin for y:=0 to 199 do begin c:=mandel(x,y); {r g b} setpoint16m(x,y,getc(c,1),getc(c,10),getc(c,100)); end; end; readln; doneg16m; end. -------------------------------8<------------------------------------ -------------------------------8<------------------------------------ unit gr16m; {$S-,X+,G+} interface function initg16m:boolean; procedure doneg16m; procedure setpoint16m(x,y:integer;r,g,b:byte); implementation лучше сделать самому {-deliberate syntax error ;) (C)FreeJPEG} end. -------------------------------8<------------------------------------ RZ> PPPS: У меня есть какая-то дpевняя proggie (Fractint.Exe), котоpая RZ> умеет стpоить эти фpакталы, а в оной есть _куча_ всяких фоpмул, RZ> котоpые ну очень кpуто выглядят. Так вот как бы их.... самому RZ> изобpазить :-[~~~ К ней есть свободные соpцы. Поищи. Buy! Сеpега. [Team sz * -k]

Всего 7 фpагмент(а/ов) |пpедыдущий фpагмент (7)

Если вы хотите дополнить FAQ - пожалуйста пишите.

design/collection/some content by Frog,
DEMO DESIGN FAQ (C) Realm Of Illusion 1994-2000,
При перепечатке материалов этой страницы пожалуйста ссылайтесь на источник: "DEMO.DESIGN FAQ, http://www.enlight.ru/demo/faq".