IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Компьютерная графика, Переход от трёхмерных координат к двумерным
Ирина
сообщение 24.05.2006 15:34
Сообщение #1





Группа: Пользователи
Сообщений: 8
Пол: Женский

Репутация: -  0  +


Здравствуйте все! Подскажите пожалуйста.
Имеется фигура, заданная трёхмерными координатами. Для изменения фигуры или масштабирования её нужно использовать матрицы. Ну с матрицами я вроде бы разобралась. С помощью операций с матрицами я высчитываю новые координаты фигуры. Затем с помощью процедуры 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.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 18.07.2025 18:09
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"