Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

3д график без трехмерных библиотек

48K
21 апреля 2009 года
Zerony
6 / / 21.04.2009
Так как часто видел такие вопросы, типа: "Надо 3д график сделать, и не гразите, сам знаю что надо оупен и директ выучить" то выставлю вариант графика в пространстве, работающего на основе плавающего контура. (кто знает тот поймет)

Код:
uses crt,graph;
var GraphDriver,GraphMode:integer;
function f3D(x,y:real):real;
begin f3D:=Sin (x); end;

procedure build_gr_3D(x1,y1,x2,y2,d:integer);
var i,j,mx,my,mz,nx,ny,xi,yi:integer;f,x,y,a1,b1,a2,b2,h1,h2,k,min,max:real;
    up_gor,down_gor:array[0..640]of integer;
begin nx:=50;ny:=50;    {//к-ть ліній на які поділено поверхю(розмір сітки)}
setviewport(x1,y1-d,x2+d,y2,false);
my:=x2-x1;mx:=d;mz:=y2-y1;
a1:=-2;b1:=2;a2:=-4;b2:=5;
h1:=(b1-a1)/mx;h2:=(b2-a2)/my;
max:=f3D(a1,a2);min:=max;
for j:=0 to my do for i:=0 to mx do begin x:=a1+h1*i;y:=a2+h2*j;f:=f3D(x,y);
if max<f then max:=f;
if min>f then min:=f;end;
setcolor(8);setlinestyle(3,1,1);line(mx,0,mx,mz);line(mx,mz,my+mx,mz);line(mx,mz,0,mz+mx);
setlinestyle(0,1,1);
k:=mz/(max-min);setcolor(150);
for i:=0 to my do begin up_gor:=round(mz+mx-(f3D(a1,i*h2+a2)-min)*k);down_gor:=up_gor;end;
for i:=0 to mx do begin up_gor[i+my]:=round(mz+mx-(f3D(i*h1+a1,h2*my+a2)-min)*k-i);down_gor[i+my]:=up_gor[i+my];end;
for j:=0 to nx do begin
moveto(round(j*mx/nx),round(mz+mx-(f3D(h1*j*mx/nx+a1,a2)-min)*k-j*mx/nx));
for i:=1 to my do begin xi:=i+round(j*mx/nx);yi:=round(mz+mx-(f3D(h1*j*mx/nx+a1,i*h2+a2)-min)*k-j*mx/nx);
                  if (down_gor[xi]<=yi)and(yi<=up_gor[xi])and(j<>0) then moveto(xi,yi)
                  else begin lineto(xi,yi);
                       if down_gor[xi]>yi then down_gor[xi]:=yi;
                       if up_gor[xi]<yi then up_gor[xi]:=yi;
                       end;  end;  end;
for i:=0 to my do begin up_gor:=round(mz+mx-(f3D(a1,i*h2+a2)-min)*k);down_gor:=up_gor;end;
for i:=0 to mx do begin up_gor[i+my]:=round(mz+mx-(f3D(i*h1+a1,h2*my+a2)-min)*k-i);down_gor[i+my]:=up_gor[i+my];end;
for j:=ny downto 0 do begin
moveto(round(j*my/ny),round(mz+mx-(f3D(a1,h2*j*my/ny+a2)-min)*k));
for i:=1 to mx do begin xi:=i+round(j*my/ny);yi:=round(mz+mx-(f3D(i*h1+a1,h2*j*my/ny+a2)-min)*k-i);
                  if (down_gor[xi]<=yi)and(yi<=up_gor[xi])and(j<>ny) then moveto(xi,yi)
                  else begin lineto(xi,yi);
                       if down_gor[xi]>yi then down_gor[xi]:=yi;
                       if up_gor[xi]<yi then up_gor[xi]:=yi;
                       end; end; end;
setcolor(7);rectangle(0,mx,my,mz+mx);
line(0,mx,mx,0);line(mx,0,my+mx,0);line(my+mx,0,my,mx);line(my+mx,0,my+mx,mz);line(my,mz+mx,my+mx,mz);end;
begin
graphDriver:=VGA;
GraphMode:=VGAHi;
InitGraph(graphDriver,GraphMode,'D:\bp\bgi');
build_gr_3D(1,200,410,479,200);
read;

closegraph;end.


В результате вы получите очень красивый график. Привяжете синтаксический анализатор и вполне потянет для того чтоб зароботать репутацию в преподавателя.

Источник: softengines.ru
48K
21 апреля 2009 года
Zerony
6 / / 21.04.2009
Вот как я его сделал для делфи, кому надо - обращайтесь дам исходник.

http://s61.radikal.ru/i173/0904/93/05c470c6a911.jpg
311
21 апреля 2009 года
plastictown
309 / / 08.01.2006
Сделал вот так:

 
Код:
procedure getProjection(x,y,z:integer);
          var
             result:coords2;
             zz:real;
          begin
               zz:=z*(sqrt(2)/2);
               result.x:=round(x-zz)+center.x;
               result.y:=-round(y-zz)+center.y;
               MyCoord2:=result; { Результат}
          end;


MyCoord2 и center : coords2.

Нужно, конечно, определить структуру coords2. Передаете 3 координаты, получаете 2. А больше ничего и не нужно.
48K
22 апреля 2009 года
Zerony
6 / / 21.04.2009
Исходник в дельфи, по просьбам.

http://slil.ru/27474614
48K
01 мая 2010 года
Zerony
6 / / 21.04.2009
Есть версия с синтаксическим анализом. Если кому интерестно - качайте:

azero.org/3d.rar
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог