Страница 1 из 1

фракталы

СообщениеДобавлено: 12.09.2007 14:27:32
Mayor
хочу заценить фракталы:

что можно почитать по фракталам для полного ньюба?

каким кросплатформенным юнитом можно выводить точки и линии на экран?

СообщениеДобавлено: 14.09.2007 12:31:39
Dic
Сам маюсь этими вопросами, что-то разные советы дают. Из того, что мне насоветовали и сам допер: (может почитав откликнутся Гуру и раскритикуют. Хоть какая-то информация будет :D )
Ну так вот я для себя решил, что если LAZARUS, то лучше всего наверное отрисовка на CANVASE. Если ее еще и в отдельной библиотеке делать, то получится весьма переносимо.
Ну а если на FPC, то как ни странно посоветовали GRAPH. тоже неплохо если просто рисовать.

СообщениеДобавлено: 14.09.2007 13:29:23
alexs
всё верно
единственное но по lazarus
т.к. отрисовка самого фрактала не очень быстрая - то можно просто использовать буферизацию, сначала на BitMap-е её просто рисуеш - а потом при отображении на экран просто копируеш с канвы битмапа на канву формы (или куда ты там выводиш)

СообщениеДобавлено: 14.09.2007 23:01:49
Mayor
Код: Выделить всё
program derevo;
uses graph,crt;
var gd,gm:integer;

procedure line1(x1,x2,x3,x4 : double);
begin
   line(round(x1),round(x2),round(x3),round(x4));
end;

procedure frac1(x1,y1,x2,y2,i:double);
var x3,y3,x4,y4,dx,dy,x5,y5 : double;
begin
   if (i>0) then
      begin
         line1(x1,y1,x2,y2);
         i-=1;
         dx:=(x2-x1) / 1.6;
         dy:=(y2-y1) / 1.6;
         x3:=x1+dx;
         y3:=y1+dy;
         x4:=x3+dy;
         y4:=y3-dx;
         x5:=x3-dy;
         y5:=y3+dx;
         frac1(x3,y3,x4,y4,i);
         frac1(x3,y3,x5,y5,i);
      end;
end;

   var ii,w : integer;
      xc1,yc1,cc1,cc,xc,yc,x,y,r,a,x0,y0 : double;
begin
initgraph(gd,gm,'c:\tp70\bgi');
x0:=300;
y0:=400;
x:=80;
y:=50;
w:=0;
r:=sqrt(x*x+y*y);
a:=arctan(x/y);
cc:=0.7;
xc:=x0+cc*r*sin(a);
yc:=y0+cc*r*cos(a);
cc1:=0.2;
xc1:=x0+cc1*r*sin(a);
yc1:=y0+cc1*r*cos(a);
for ii :=1 to 500 do
   begin
      w:=1 xor w;
      a+=0.05;
      setactivepage(w);
      x:=xc+r*sin(a);
      y:=yc+r*cos(a);
      x0:=xc1-cc1*r*sin(cc1+a);
      y0:=yc1+cc1*r*cos(cc1+a);
      xc1:=x0+cc1*r*sin(a);
      yc1:=y0+cc1*r*cos(a);
      frac1(x0,y0,x,y,10);
      setvisualpage(w);
      delay(30);
      cleardevice();
   end;
delay(1000);
end.


может другой юнит есть, который отделается от мерцания?

что можно почитать по 3D векторной графике для полного ньюба?

как отобразить плоскость в трехмерном пространстве?

что есть из gpl тулз для создания простых векторных изображений?

можно пример канваса-битмапа который отделается от мерцания?

СообщениеДобавлено: 15.09.2007 13:18:23
Lazy
http://math.ubbcluj.ro/~sberinde/wingraph/

Код: Выделить всё
program derevo;
//uses graph,crt;
uses wingraph,wincrt,winmouse,sysutils;
var gd,gm:integer;

procedure line1(x1,x2,x3,x4 : double);
begin
   line(round(x1),round(x2),round(x3),round(x4));
end;

procedure frac1(x1,y1,x2,y2,i:double);
var x3,y3,x4,y4,dx,dy,x5,y5 : double;
begin
   if (i>0) then
      begin
         line1(x1,y1,x2,y2);
         i-=1;
         dx:=(x2-x1) / 1.6;
         dy:=(y2-y1) / 1.6;
         x3:=x1+dx;
         y3:=y1+dy;
         x4:=x3+dy;
         y4:=y3-dx;
         x5:=x3-dy;
         y5:=y3+dx;
         frac1(x3,y3,x4,y4,i);
         frac1(x3,y3,x5,y5,i);
      end;
end;

   var ii,w : integer;
      xc1,yc1,cc1,cc,xc,yc,x,y,r,a,x0,y0 : double;
begin
//initgraph(gd,gm,'c:\tp70\bgi');
initgraph(gd,gm,'');
x0:=300;
y0:=400;
x:=80;
y:=50;
w:=0;
r:=sqrt(x*x+y*y);
a:=arctan(x/y);
cc:=0.7;
xc:=x0+cc*r*sin(a);
yc:=y0+cc*r*cos(a);
cc1:=0.2;
xc1:=x0+cc1*r*sin(a);
yc1:=y0+cc1*r*cos(a);
for ii :=1 to 500 do
   begin
      UpdateGraph(UpdateOff);
      w:=1 xor w;
      a+=0.05;
      setactivepage(w);
      x:=xc+r*sin(a);
      y:=yc+r*cos(a);
      x0:=xc1-cc1*r*sin(cc1+a);
      y0:=yc1+cc1*r*cos(cc1+a);
      xc1:=x0+cc1*r*sin(a);
      yc1:=y0+cc1*r*cos(a);
      frac1(x0,y0,x,y,10);
      setvisualpage(w);
      UpdateGraph(UpdateNow);
      delay(30);
      cleardevice();
   end;
delay(1000);
end.

СообщениеДобавлено: 17.09.2007 08:43:50
Mayor
cannt find unit wingraph

да и мне ващето кросплатформенный юнит желательно ...

СообщениеДобавлено: 21.09.2007 13:08:24
Lazy
cannt find unit wingraph А по ссылке лень было сходить.

Если кросплатформенный и быстрый, то используй SDL. В ней есть интерфейс к OpenGL.

СообщениеДобавлено: 22.09.2007 18:26:42
Mayor
Lazy писал(а):cannt find unit wingraph А по ссылке лень было сходить.

Если кросплатформенный и быстрый, то используй SDL. В ней есть интерфейс к OpenGL.


не знал что можно пойти по ссылке ...

а что за sdl?

у тебя сколько времени ушло на ее базовое изучение?