Асноўныя апэрацыі на вектарах ды матрыцах

Даданьне ды адыманьне вектараў ды матрыц - проста даданьне ды адыманьне адпаведных элементаў. Множаньне вектараў мае два тыпы: вектарнае памнажэньне, дзе вынік - вектар, ды скалярнае памнажэньне, дзе вынікам ёсьць лік. Скалярнае памнажэньне моцна зьвязанае зь зь канцэпцыяй базісу ў шматмернай прасторы і вынікам мае праекцыю аднаго ветара на другі. Яно задаецца формулай:

A*B = Ai*Bi

Тут прынятае простае правіла: калі нейкі індэкс ўваходзіць ў выраз некалькі разоў, маецца на ўвазе даданьне па гэтаму індэксу.

Вектарнае памножаньне крыху больш складанае. Вынікам ёсьць вектар, перпендыкулярны да абодзьвух зыходных, ды яго даўжыня роўна плошчы паралелаграма, ўтворанага гэтымі вектарамі. Вектарнае памножаньне ёсьць:
[A,B]x = AyBz - AzBy
[A,B]y = AzBx - AxBz
[A,B]z = AxBy - AyBx
,альбо , выкарыстоўваючы канцэпцыю дэтэрмінантаў:

Заўважце, што ў прасторы з трыма вымярэньнямі такое памножаньне патрабуе 2 вектары, але ў прасторы зь N вымярэньнямі патрабуецца N-1 вектараў, але скалярнае памножаньне заўсёды патрабуе толькі 2 вектары.

Найбольш агульная форма лінейнай залежнасьці паміж вектарамі ёсьць:

Bi = AijBj

Гэта завецца памножаньнем вектара ды матрыцы. Такім памножаньнем задаецца пераход зь аднаго базіса ў іншы, ды элементамі матрыцы ёсьць скалярнае памножаньне кожнага вектара першага базіса на кожны вектар другога базіса:

Aij = ei*ej

Матрыца завецца сымвалам Кранекера, альбо адзінкавай матрыцай. Відавочна, што
AiEij = Aj

Калі патрэбна перавесьці вектар спачатку ў адзін базіс, а потым ў другі, мы павінны памножыць зыходны вектар на матрыцы гэтых пераходаў. Вынік можа разглядацца як вынік памножаньня зыходнага вектара на матрыцу, якая ёсьць памножаньнем дадзеных дзьвух матрыцаў. Такім чынам, вынік памножаньня дзьвух матрыцаў ёсьць матрыцай тых жа памераў, якая задаецца формулай:

Cij = AikBljEkl
альбо коратка C = A*B

Матрыца Bij = Aji завецца матрыцай, транспанаванай да A.

Тэкст модуля, што ўтрымлівае асноўныя апэрацыі на вектарах ды матрыцах Matrix.pas.


Дэтэрмінанты, зваротныя матрыцы ды дзяленьне на матрыцу.

Ў прасторы зь трыма вымярэньнямі плошча паміж дзьвума вектарамі ёсьць:
S = [A,B]
Аб'ём паміж трыма вектарамі ёсьць скалярнае памножаньне вектара плошчы паміж першымі дзьвумя вектарамі на трэці вектар S on the third vector: V = C*S, альбо

Ў прасторы зь N вымярэньнямі "N-мерны аб'ём" паміж N вектарамі вылічаецца як дэтэрмінант:

Дэфініцыя дэтэрмінанта даецца праз рэкурсію: дэтэрмінант N-мернай матрыцы ёсьць сумма па ўсіх і памножаньняў i'га элемента першай стракі на дэтэрмінант зыходнай матрыцы без першай стракі ды i'га стаўбца. Памятайце, што трэба зьмяняць знак дададзеных на кожным новым стаўбцы.

Некаторыя ўласьцівасьці дэтэрмінанта:

Паспрабуем адшукаць матрыцу A-1 такую, што AA-1=1 Матрыца A-1 ёсьць:
Aij-1 = Sij /det(A) дзе Sij альгебраічным дапаўненьнем [i,j]га элемента - дэтэрмінантам зыходнай матрыцы без i-га стаўбца ды j-й стракі, знак якога зьмяняецца на кожным наступным стаўбцы. Матрыца A-1 завецца зваротнай матрыцай. Памножаньне AB-1 завецца дзяленьнем А на В. Памножаньне ды дзяленьне матрыцаў ёсьць даданьнем ды адыманьнем пераходаў. Напрыклад, калі вектар пераведзены ў іншы базіс памножаньнем на матрыцу A, ён можа быць пераведзены зваротна ў зыходны базіс памножаньнем на матрыцу A-1.

Тэкст працэдуры, што вылічае дэтэрмінант Determinant.pas ды тэкст модуля, што ўтрымлівае асноўныя апэрацыі на вектарах ды матрыцах Matrix.pas.


Прыкладаньне матрычнай алгебры ў 3D-графіцы

Найбольш складаныя задачы 3D-графікі - павароты ў прасторы ды эмуляцыя асьвятленьня.

Павароты ажыцьцяўляюцца зь выкарыстаньнем сферычнай сыстэмы каардынатаў. Ў ей вельмі проста варочаць аб'екты. Гэта робіцца так:

  1. Атрымліваеце павёрнуты артаганальны базіс ў сферычнай сыстэме каардынатаў
  2. Пераводзіце кожны вектар ў дэкартавыя каардынаты, выкарыстоўваючы формулы:
    x = R*cos(v)*cos(h)
    y = R*cos(v)*sin(h)
    z = R*sin(v)
    дзе v і h - гарызантальная ды вертыкальная вуглавыя каардынаты.
  3. З атрыманага базіса ўтвараеце матрыцу
  4. Дамнажаеце ўсе вектары аб'екта на гэтую матрыцу
  5. Малюеце сцэну нанава
Паварот вакол адной восі (Z) задаецца такімі формуламі:
Xn = X*cos(a) + Y*sin(a)
Yn = Y*cos(a) - X*sin(a)

Эмуляцыя асьвятленьня заснаваная на залежнасьці паміж інтэнсіўнасьцямі падаючага ды адбітага сьвятла, што задаецца формулай:
I(a) = I0*cos(a), альбо, выкарыстоўваючы вектары I = L*n,
дзе a - вугал паміж промнем сьвятла ды паверхняй, L ёсьць "вектар сьвятла"
ды n - адзінкавы вектар, перпендыкулярны да паверхні.

Кожны віртуальны 3D-аб'ект складаецца зь шматграньнікаў (няхай для прастаты гэта будуць трохкутнікі). Каб асьвятліць абэект, мы павінны вылічыць колер кожнага шматграньніка. Калі нам зададзеныя каардынаты ўсіх кропак шматграньнікаў, эмуляцыя асьвятленьня ажыцьцяўляецца ў некалькі крокаў:

  1. Атрымліваем вектары дзьвух бакоў кожнага трохкутніка (гл. малюнак)
  2. Вектарным памножаньнем атрымліваем вектар, перпендыкулярны да паверхні
  3. Робім гэты вектар адзінкавым і атрымліваем адзінкавы вектар, перпендыкулярны да паверхні (n).
  4. Скалярным памножаньнем n на вектар сьвятла (ягоны кірунак - кірунак прамянёў ды ягоная даўжыня прапарцыянальная інтэнсіўнасьці сьвятла) атрымліваем інтэнсіўнасьць адбітага сьвятла.

RGB-кампаненты колера зыходнага трохкутніка прапарцыянальныя інтэнсіўнасьці адбітага сьвятла.

Тэкст праграмы, што будуе асьветленыя 3D-паверхні Graph3D.zip


©2002-2003, Veter      English  Беларуская  Русский
Сайт создан в системе uCoz