фракталы

Общие вопросы программирования, алгоритмы и т.п.

Модератор: Модераторы

фракталы

Сообщение Mayor » 12.09.2007 14:27:32

хочу заценить фракталы:

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

каким кросплатформенным юнитом можно выводить точки и линии на экран?
Mayor
новенький
 
Сообщения: 20
Зарегистрирован: 04.09.2007 16:55:14

Сообщение Dic » 14.09.2007 12:31:39

Сам маюсь этими вопросами, что-то разные советы дают. Из того, что мне насоветовали и сам допер: (может почитав откликнутся Гуру и раскритикуют. Хоть какая-то информация будет :D )
Ну так вот я для себя решил, что если LAZARUS, то лучше всего наверное отрисовка на CANVASE. Если ее еще и в отдельной библиотеке делать, то получится весьма переносимо.
Ну а если на FPC, то как ни странно посоветовали GRAPH. тоже неплохо если просто рисовать.
Dic
новенький
 
Сообщения: 28
Зарегистрирован: 28.08.2007 11:16:42
Откуда: Красноярск

Сообщение alexs » 14.09.2007 13:29:23

всё верно
единственное но по lazarus
т.к. отрисовка самого фрактала не очень быстрая - то можно просто использовать буферизацию, сначала на BitMap-е её просто рисуеш - а потом при отображении на экран просто копируеш с канвы битмапа на канву формы (или куда ты там выводиш)
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4053
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Сообщение Mayor » 14.09.2007 23:01:49

Код: Выделить всё
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 тулз для создания простых векторных изображений?

можно пример канваса-битмапа который отделается от мерцания?
Mayor
новенький
 
Сообщения: 20
Зарегистрирован: 04.09.2007 16:55:14

Сообщение Lazy » 15.09.2007 13:18:23

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.
Lazy
незнакомец
 
Сообщения: 8
Зарегистрирован: 11.07.2006 09:59:10

Сообщение Mayor » 17.09.2007 08:43:50

cannt find unit wingraph

да и мне ващето кросплатформенный юнит желательно ...
Mayor
новенький
 
Сообщения: 20
Зарегистрирован: 04.09.2007 16:55:14

Сообщение Lazy » 21.09.2007 13:08:24

cannt find unit wingraph А по ссылке лень было сходить.

Если кросплатформенный и быстрый, то используй SDL. В ней есть интерфейс к OpenGL.
Lazy
незнакомец
 
Сообщения: 8
Зарегистрирован: 11.07.2006 09:59:10

Сообщение Mayor » 22.09.2007 18:26:42

Lazy писал(а):cannt find unit wingraph А по ссылке лень было сходить.

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


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

а что за sdl?

у тебя сколько времени ушло на ее базовое изучение?
Mayor
новенький
 
Сообщения: 20
Зарегистрирован: 04.09.2007 16:55:14


Вернуться в Общее

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3

Рейтинг@Mail.ru