Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 03.02.2008, 19:15
Аватар для Oleg
Oleg Oleg вне форума
Активный
 
Регистрация: 29.11.2007
Адрес: Оренбургская обл., Россия
Сообщения: 261
Репутация: 15
Восклицание Помогите с матрицей

Напишите пожалуйста примеры работы с матрицей, а то я вообще даже не знаю с чего начать, а это очень нужно более-менее узнать до завтра.
Вот что известно:
Код:
Ясно, что если нам потребуется (а нам потребуется :) ) проводить для каждой точки в пространстве параллельный перенос + поворот в пространстве, то придется сделать огромное количество преобразований. 
Можно построить матрицы преобразований, помножив точку - вектор на которую, мы получим результат — координаты искомой точки. 

матрица параллельного переноса: 
  [ 1  0  0  0 ]

  [ 0  1  0  0 ]

  [ 0  0  1  0 ]

  [ x  y  z  1 ]

матрица растяжения/сжатия: 
  [ z  0  0  0 ]

  [ 0  y  0  0 ]

  [ 0  0  x  0 ]

  [ 0  0  0  1 ]

матрица поворота вокруг оси x: 
  [ 1    0      0    0 ]

  [ 0  cos α  sin α  0 ]

  [ 0 -sin α  cos α  0 ]

  [ 0    0      0    1 ]

матрица поворота вокруг оси y: 
  [ cos α  0 -sin α  0 ]

  [   0    1    0    0 ]

  [ sin α  0  cos α  0 ]

  [   0    0    0    1 ]

матрица поворота вокруг оси z: 
  [ cos α  sin α  0  0 ]

  [-sin α  cos α  0  0 ]

  [   0      0    1  0 ]

  [   0      0    0  1 ]

Теперь, зачем нужны матрицы в 3D-програмировании, если можно все сделать с помощью векторов, и если, например, поворот точки с помощью векторов занимает меньше операций, чем используя матрицы.
Напишите пожалуйста примеры хоть с некоторыми из данных. Желательно, если можете на GLScene и как можно проще. Пожалуйста напишите пример как можно проще, очень нужно, срочно
__________________
Если Вы находите ошибки, исправить которые дело долгое и нудное, ничего не делайте - просто внесите их в список особенностей
Ответить с цитированием
  #2  
Старый 04.02.2008, 12:34
AlexSku AlexSku вне форума
Специалист
 
Регистрация: 07.05.2007
Адрес: Москва
Сообщения: 884
Репутация: 21699
По умолчанию

Правило перемножения матриц:
C[ni, nj] = A[ni, nk] * B[nk, nj] (это размерности)
С[i, j] = sum(A[i, k] * B[k, j]) (это элементы, где k= 1..nk).
В нашем случае имеем x1[1x4] = x0[1x4] * A[4x4], где x0 - координаты до преобразования (x, y, z, 1), x1 - координаты после преобразования.
Код:
var
 x1, x0: array[1..4] of Real;
 A:      array[1..4, 1..4] of Real;
procedure TForm1.FormCreate(Sender: TObject);
var
  i, j: Integer;
begin
  for i:= 1 to 4 do
  begin
    x1[i]:= 0;
    for j:= 1 to 4 do
      x1[i]:= x1[i] + x0[j] * A[i, j];
  end;
end;

Последний раз редактировалось AlexSku, 04.02.2008 в 12:37.
Ответить с цитированием
  #3  
Старый 04.02.2008, 14:02
Аватар для Oleg
Oleg Oleg вне форума
Активный
 
Регистрация: 29.11.2007
Адрес: Оренбургская обл., Россия
Сообщения: 261
Репутация: 15
Радость Спасибо

Я конечно хотел бы наглядный пример, почитав твое сообщение и 10 раз пересмотрев пример переумножения я наконец понял как её умножать, спасибо.
Да вот ещё вопрос почему матрица 4х размерная, а не 3х(x,y,z)
Что значит последнее значение в 4х размерной матрице? ведь координаты 3(x,y,z) ?
__________________
Если Вы находите ошибки, исправить которые дело долгое и нудное, ничего не делайте - просто внесите их в список особенностей

Последний раз редактировалось Oleg, 04.02.2008 в 14:08.
Ответить с цитированием
  #4  
Старый 05.02.2008, 10:00
Аватар для XIO
XIO XIO вне форума
Новичок
 
Регистрация: 06.12.2007
Сообщения: 77
Репутация: 32
По умолчанию

Цитата:
Сообщение от Oleg
Да вот ещё вопрос почему матрица 4х размерная, а не 3х(x,y,z)
Что значит последнее значение в 4х размерной матрице? ведь координаты 3(x,y,z) ?

Либо я чего то не допонял, либо Вы автор не понял глубины смысла описания матрицы.
Матрица это такой же массив данных как и вектор. Только у вектора есть лишь строка, а у матрицы строка и столбец. Так же матрица может быть трёх мерной, в таком случае у неё каждая ячейка будет иметь несколько слоёв, для наглядности представьте кубик-рубик. Примерно так...
Описание матрицы:
Код:
 Имя_Переменной :array[Количество столбцов, Количество строк] of Тип данных;
Столбцы и строки я мог поменять местами, хотя сути это не меняет. Если есть ещё непонятки, спрашивайте. Можете в аську стукнуть. Попытаюсь объяснить.
ICQ: 278869299
__________________
"Люди никогда не видят то, существование чего им кажется невозможным." ©Терри Пратчетт
Ответить с цитированием
  #5  
Старый 05.02.2008, 12:24
AlexSku AlexSku вне форума
Специалист
 
Регистрация: 07.05.2007
Адрес: Москва
Сообщения: 884
Репутация: 21699
По умолчанию

В DirectX наряду с матрицами 4х4 используют также кватернионы (4 числа) для описания вращений. Что касается матриц, то, скорее всего, это координата веса (w, Weight), которую обрабатывает видеопроцессор. Ему можно передавать несколько матриц, надо чтобы все w в сумме давали 1, таким образом реализуется смешивание (weight blending). Подобное реализуется и в альфа-канале цвета, но у него свои алгоритмы. Можно попробовать сделать элемент [4, 4] меньше 1, тогда должно неправильно работать освещение.
Ответить с цитированием
  #6  
Старый 21.02.2008, 13:05
AlexSku AlexSku вне форума
Специалист
 
Регистрация: 07.05.2007
Адрес: Москва
Сообщения: 884
Репутация: 21699
По умолчанию

Прочитал в книжке, что число матрицы _44 это коэффициент, на который делятся координаты x, y, z. Поставил 0.5 (в matWorld) и картинка увеличилась.
Ответить с цитированием
  #7  
Старый 21.02.2008, 13:45
Аватар для Oleg
Oleg Oleg вне форума
Активный
 
Регистрация: 29.11.2007
Адрес: Оренбургская обл., Россия
Сообщения: 261
Репутация: 15
Хорошо

AlexSku, спасибо что пояснил
__________________
Если Вы находите ошибки, исправить которые дело долгое и нудное, ничего не делайте - просто внесите их в список особенностей
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 17:53.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter