Новичок
Джуниор
Регистрация: 20.06.2013
Сообщений: 1
|
Трехмерная графика в Паскаль
Доброго времени суток!
Подскажите если кто знает, что нужно сделать с данной программкой, чтобы получился перенос одновременно по всем осям. Или проще переписать все заново?
Код:
uses crt, graph, dos;
type
pixel=record
x,y,z :real;
end;
var
i: integer;
pkey : char;
ErrCode, grMode, grDriver : Integer;
const kub:array[1..8] of pixel =
((x:100;y:50;z:50),
(x:100;y:50;z:-50),
(x:0;y:50;z:-50),
(x:0;y:50;z:50),
(x:50;y:-50;z:50),
(x:50;y:-50;z:-50),
(x:-50;y:-50;z:-50),
(x:-50;y:-50;z:50));
procedure draw_kub;
begin
line(round(kub[1].x)+320,round(kub[1].y)+240,round(kub[2].x)+320,round(kub[2].y)+240);
line(round(kub[2].x)+320,round(kub[2].y)+240,round(kub[3].x)+320,round(kub[3].y)+240);
line(round(kub[3].x)+320,round(kub[3].y)+240,round(kub[4].x)+320,round(kub[4].y)+240);
line(round(kub[4].x)+320,round(kub[4].y)+240,round(kub[1].x)+320,round(kub[1].y)+240);
line(round(kub[5].x)+320,round(kub[5].y)+240,round(kub[6].x)+320,round(kub[6].y)+240);
line(round(kub[6].x)+320,round(kub[6].y)+240,round(kub[7].x)+320,round(kub[7].y)+240);
line(round(kub[7].x)+320,round(kub[7].y)+240,round(kub[8].x)+320,round(kub[8].y)+240);
line(round(kub[8].x)+320,round(kub[8].y)+240,round(kub[5].x)+320,round(kub[5].y)+240);
line(round(kub[1].x)+320,round(kub[1].y)+240,round(kub[5].x)+320,round(kub[5].y)+240);
line(round(kub[2].x)+320,round(kub[2].y)+240,round(kub[6].x)+320,round(kub[6].y)+240);
line(round(kub[3].x)+320,round(kub[3].y)+240,round(kub[7].x)+320,round(kub[7].y)+240);
line(round(kub[4].x)+320,round(kub[4].y)+240,round(kub[8].x)+320,round(kub[8].y)+240);
end;
procedure
rotate(xv, yv, zv : integer; var x, y, z : real);
var Yt,Xt,Zt:real;
begin
Yt:=Y*cos(xv)-Z*sin(xv);
Zt:=Y*sin(xv)+Z*cos(xv);
Y:=Yt;
Z:=Zt;
Xt:=X*cos(yv)-Z*sin(yv);
Zt:=X*sin(yv)+Z*cos(yv);
X:=Xt;
Z:=Zt;
Xt:=X*cos(zv)-Y*sin(zv);
Yt:=X*sin(zv)+Y*cos(zv);
X:=Xt;
Y:=Yt;
end;
procedure mas_max(var x, y, z : real);
begin
z:=z*1.1;
x:=x*1.1;
y:=y*1.1;
end;
procedure mas_min(var x, y, z : real);
begin
x:=x/1.1;
y:=y/1.1;
z:=z/1.1;
end;
begin
clrscr;
grDriver := Detect;
InitGraph(grDriver, grMode,'');
ErrCode := GraphResult;
if ErrCode = grOk then
begin
for i:=1 to 8 do
rotate(10, 20, 0, kub[i].x, kub[i].y, kub[i].z);
setcolor(10);
draw_kub;
repeat
if keypressed then
begin
pkey:=readkey;
begin
cleardevice;
for i:=1 to 8 do
case pkey of
'1' : mas_max(kub[i].x, kub[i].y, kub[i].z);
'2' : kub[i].y:=kub[i].y+1;
'3' : mas_min(kub[i].x, kub[i].y, kub[i].z);
'4' : kub[i].x:=kub[i].x-1;
'5' : rotate(15, 20, 35, kub[i].x, kub[i].y, kub[i].z);
'6' : kub[i].x:=kub[i].x+1;
'8' : kub[i].y:=kub[i].y-1;
end;
draw_kub;
end;
end;
until pkey='0';
end;
end.
Заранее благодарю.
Последний раз редактировалось Black_Star; 20.06.2013 в 09:09.
|