Форум «Всё о Паскале» _ Задачи _ Компьютерная графика
Автор: Ирина 24.05.2006 19:34
Здравствуйте все! Подскажите пожалуйста. Имеется фигура, заданная трёхмерными координатами. Для изменения фигуры или масштабирования её нужно использовать матрицы. Ну с матрицами я вроде бы разобралась. С помощью операций с матрицами я высчитываю новые координаты фигуры. Затем с помощью процедуры Pict_3(5) хочу прорисовать этот объект на экране. Но вот как перевести трёхмерные координаты в координаты на экране не понятно. Может кто-нибудь подскажет...
У меня сейчас пока вот такой код:
Код
uses crt, graph; {используемые модули} var n,i,j,k: integer; xa,ya,za: array [1..50] of real; {координаты фигуры} x,y,z,xp,yp: array [1..50] of real; {расчётные координаты фигуры} ErrCode, grMode, grDriver : Integer; {переменные для работы с графическим драйвером} a,b,r: array [1..4, 1..4] of real; h: array [1..50] of integer;
{________ процедура присвоения матрице R значения единичной____________________} procedure R_1; begin for i:=1 to 4 do begin {единичная матрица} for j:=1 to 4 do { 1 0 0 0} r[i,j]:=0; { 0 1 0 0} r[i,i]:=1; { 0 0 1 0} end; { 0 0 0 1} end;
procedure Mult_3; var z:real; begin for i:=1 to 4 do for j:=1 to 4 do begin z:=0; for k:=1 to 4 do z:=z+a[i,k]*r[k,j]; b[i,j]:=z; end; for i:=1 to 4 do for j:=1 to 4 do r[i,j]:=b[i,j]; { результат умножения матриц - матрица В записывается в R } end; {_________процедура вычисления новых координат фигуры по базовым координатам_} {_________xa, ya, za с использованием матрицы R______________________________} procedure New_XYZ; begin for i:=1 to i do begin x[i]:=round(xa[i]*r[1,1]+ya[i]*r[1,2]+za[i]*r[1,3]+r[1,4]); y[i]:=round(xa[i]*r[2,1]+ya[i]*r[2,2]+za[i]*r[2,3]+r[2,4]); z[i]:=round(xa[i]*r[3,1]+ya[i]*r[3,2]+za[i]*r[3,3]+r[3,4]); end; end; {______расчёт матриц а в для масштабирования трёхмерного объекта_________} procedure Scale_3(sx,sy,sz:real); begin for i:=1 to 4 do {матрица для масштабирования} for j:=1 to 4 do { sx 0 0 0 } a[i,j]:=0; a[1,1]:=sx; { 0 sy 0 0 } a[2,2]:=sy; a[3,3]:=sz; { 0 0 sz 0 } a[4,4]:=1; { 0 0 0 1 } Mult_3; end; {____процедура рисования фигуры по координатам X Y_______________} procedure pict_3(color:word); var i,j:integer; SetBkColor(13); SetColor(15);
for i:=1 to 5 do begin { Считаем что ось Y - вертикально, X - горизонтально } { Вычисляем координаты на экране }