Имеется фигура, заданная трёхмерными координатами. Для изменения фигуры или масштабирования её нужно использовать матрицы. Ну с матрицами я вроде бы разобралась. С помощью операций с матрицами я высчитываю новые координаты фигуры. Затем с помощью процедуры 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 - горизонтально }
{ Вычисляем координаты на экране }
end;
line(xp[1],yp[1],xp[2],xp[2]);
line(xp[2],yp[2],xp[3],xp[3]);
line(xp[1],yp[1],xp[4],xp[4]);
end;
{______основная программа______________________________________}
begin
clrscr; {очистить экран}
grDriver := Detect; {попытка инициализировать графический режим}
InitGraph(grDriver, grMode,'C:\BP\BGI');
ErrCode := GraphResult;
SetColor(10);
if ErrCode = grOk then
begin
xa[1]:=0; ya[1]:=0; za[1]:=10;
xa[2]:=50; ya[2]:=0; za[2]:=10;
xa[3]:=50; ya[3]:=20; za[3]:=10;
xa[4]:=0; ya[4]:=20; za[4]:=10;
xa[5]:=50; ya[5]:=50; za[5]:=100;
pict_3(10);
end;
end.