![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() |
Ирина |
![]()
Сообщение
#1
|
Группа: Пользователи Сообщений: 8 Пол: Женский Репутация: ![]() ![]() ![]() |
Здравствуйте все! Подскажите пожалуйста.
Имеется фигура, заданная трёхмерными координатами. Для изменения фигуры или масштабирования её нужно использовать матрицы. Ну с матрицами я вроде бы разобралась. С помощью операций с матрицами я высчитываю новые координаты фигуры. Затем с помощью процедуры 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. |
![]() ![]() |
![]() |
Текстовая версия | 18.07.2025 14:51 |