НАУЧНО - ПОПУЛАРНИ СТАТИИСе залагаме за зголемување на свеста за местото и улогата на математиката во науките, технологијата, наставата, природата и културата.
|
ВИЗУАЛИЗАЦИЈА НА ФУНКЦИИ СО ГРАФИЧКО ПРОГРАМИРАЊЕ
Постоjат голем броj алатки за визуализациjа на математичките поими. Нивна цел е да понудат нов начин на разбирање на тие поими преку интуитивни визуелни прегледи. Наjпознати меѓу алатките за визуализациjа се Wolfram Alpha, GeoGebra и Desmos. Овие алатки нудат целосна контрола врз дадени параметри кои влиjаат на визуелизираниот резултат.
Апликациите за визуализациjа имаат сложени системи за вчитување на наредби, функции, изрази, сметање и визуализациjа на резултатите. Исто така, сите исклучоци, случаите на недефинираност или можни проблеми при внесување на израз мора да се предвидат однапред.
Во оваа статиjа е обjаснето создавање на едноставна апликациjа за визуализациjа на функции, како и површините добиени со нивна ротациjа околу една оска. Целта е нудење на визуелна претстава на тридимензионалните површини создадени со ротациjа на функции, но и презентација на начинот на кој се добиваат ротационите површини.
Апликацијата која ќе ја изложиме тука користи растеризација како метод на 'цртање'. Односно, се користат голем број на помали триаголници во тридимензионалниот простор за да апроксимираат дадена форма. Слично како што сликите во дигитален формат кои ги користиме, се создадени од мали пиксели кои формираат поголема целина, за разлика од векторскиот вид на репрезентација на слики. Растеризацијата е реализирана преку графичка спецификација наречена OpenGL што ја користи моќта на графичкиот процесор на компјутерот за да извршува голем број на операции со вектори и матрици прилично брзо.
Краток опис на апликацијата
Секоjа функциjа е дефинирана со подредени парови од x вредност и вредноста на функцијата за таа x вредност т.е. (x, f (x)). Кај функциите со реален домен, бидеjќи на x-оската има бесконечно многу вредности за x, само мал броj од нив се користат за пресметување на точките на функциjата. За да се постигне ова, по првата вчитана вредност за x, следната вредност е поместена за одреден броj n единици по должината на x-оската. Колку е помала оваа вредност, толку повеќе точки се пресметуваат и зачувуваат во мемориjа, даваjќи поточна слика на функциjата.
Бидејќи има бесконечно многу вредности за x, програмата jа визуализира функциjата за секоjа избрана вредност на x во интервалот [a,b]. Вредностите a и b се променливи за кои програмата го прашува корисникот пред визуализациjата. По внесот на сите побарани променливи, се пресметуваат сите точки на функциjата и се прикажува нов прозорец со резултатот - функциjата исцртана во тридимензионален координатен систем (Слика 1.a). Корисникот потоа има опциjа да ги ротира сите точки на функциjата околу y-оската користеjќи го глувчето, или да jа прикаже тридимензионалната површина добиена со ротациjа на функциjата околу x-оската (Слика 1.б).
Апликациите за визуализациjа имаат сложени системи за вчитување на наредби, функции, изрази, сметање и визуализациjа на резултатите. Исто така, сите исклучоци, случаите на недефинираност или можни проблеми при внесување на израз мора да се предвидат однапред.
Во оваа статиjа е обjаснето создавање на едноставна апликациjа за визуализациjа на функции, како и површините добиени со нивна ротациjа околу една оска. Целта е нудење на визуелна претстава на тридимензионалните површини создадени со ротациjа на функции, но и презентација на начинот на кој се добиваат ротационите површини.
Апликацијата која ќе ја изложиме тука користи растеризација како метод на 'цртање'. Односно, се користат голем број на помали триаголници во тридимензионалниот простор за да апроксимираат дадена форма. Слично како што сликите во дигитален формат кои ги користиме, се создадени од мали пиксели кои формираат поголема целина, за разлика од векторскиот вид на репрезентација на слики. Растеризацијата е реализирана преку графичка спецификација наречена OpenGL што ја користи моќта на графичкиот процесор на компјутерот за да извршува голем број на операции со вектори и матрици прилично брзо.
Краток опис на апликацијата
Секоjа функциjа е дефинирана со подредени парови од x вредност и вредноста на функцијата за таа x вредност т.е. (x, f (x)). Кај функциите со реален домен, бидеjќи на x-оската има бесконечно многу вредности за x, само мал броj од нив се користат за пресметување на точките на функциjата. За да се постигне ова, по првата вчитана вредност за x, следната вредност е поместена за одреден броj n единици по должината на x-оската. Колку е помала оваа вредност, толку повеќе точки се пресметуваат и зачувуваат во мемориjа, даваjќи поточна слика на функциjата.
Бидејќи има бесконечно многу вредности за x, програмата jа визуализира функциjата за секоjа избрана вредност на x во интервалот [a,b]. Вредностите a и b се променливи за кои програмата го прашува корисникот пред визуализациjата. По внесот на сите побарани променливи, се пресметуваат сите точки на функциjата и се прикажува нов прозорец со резултатот - функциjата исцртана во тридимензионален координатен систем (Слика 1.a). Корисникот потоа има опциjа да ги ротира сите точки на функциjата околу y-оската користеjќи го глувчето, или да jа прикаже тридимензионалната површина добиена со ротациjа на функциjата околу x-оската (Слика 1.б).
Слика 1: Резултат - визуализација на функцијата sin(x) во интервалот [-5; 5].
а) Функцијата визуализирана во xy-рамнината; б) Изротираната функција е визуелизирана во xyz-просторот.
а) Функцијата визуализирана во xy-рамнината; б) Изротираната функција е визуелизирана во xyz-просторот.
Објаснување на трансформациите
Постоjат три видови на трансформации во тридимензионален простор - транслациjа, ротациjа и скаларно зголемување / намалување. Начинот на коj се дефинирани сите точки е со користење на тридимензионален вектор коj содржи x, y и z координати. Односно, секоjа точка може да се претстави како вектор коj има почеток во координатниот почеток (0, 0, 0) и краj во точката (x, y, z). Ова го овозможува користењето на основните своjства на вектори за постигнување на посакуваните трансформации. Во оваа апликациjа се користат матрици и своjствата за операции на вектори со матрици.
Квадратна матрица со големина (n+1) може да содржи во неа бесконечен броj на трансформации, користеjќи различни делови од матрицата. Матрицата се користи така што при производ со почетниот вектор, се добива нов трансформиран вектор, и соодветно нова позициjа на точка. За транслациjа се користат десните елементи на матрицата (елементите од последната колона), за да се добие нов вектор чии координати се збирот од почетните координати и елементите на матрицата со кои е дефинирана транслацијата.
Постоjат три видови на трансформации во тридимензионален простор - транслациjа, ротациjа и скаларно зголемување / намалување. Начинот на коj се дефинирани сите точки е со користење на тридимензионален вектор коj содржи x, y и z координати. Односно, секоjа точка може да се претстави како вектор коj има почеток во координатниот почеток (0, 0, 0) и краj во точката (x, y, z). Ова го овозможува користењето на основните своjства на вектори за постигнување на посакуваните трансформации. Во оваа апликациjа се користат матрици и своjствата за операции на вектори со матрици.
Квадратна матрица со големина (n+1) може да содржи во неа бесконечен броj на трансформации, користеjќи различни делови од матрицата. Матрицата се користи така што при производ со почетниот вектор, се добива нов трансформиран вектор, и соодветно нова позициjа на точка. За транслациjа се користат десните елементи на матрицата (елементите од последната колона), за да се добие нов вектор чии координати се збирот од почетните координати и елементите на матрицата со кои е дефинирана транслацијата.
За скаларно зголемување се користат елементите на матрицата поставени по главната диjагонала. Користеjќи ги овие позиции, при множење со вектор се добива нов вектор чии координати се помножени со елементите поставени диагонално во матрицата.
За ротациjа е малку покомплицирано. Бидеjќи можна е ротациjа околу сите три оски, различен е изгледот на матрицата на трансформацијата за секоjа од оските.
Овие трансформации се аплицираат на секоjа точка по следниот редослед: скаларно зголемување, ротациjа, транслациjа. Бидеjќи ротациjата е аплицирана од координатниот почеток, било коj друг редослед на операции не би функционирал, затоа што транслациjата ќе има ефект врз ротациjата, резултираjќи со непосакувана позициjа на точката.
Знаеjќи го ова, и фактот дека матриците се множат од десно кон лево (ова е специфично на OpenGL, методот на графичка растеризациjа коj го користи програмата, бидеjќи користи Column-Major вид на запис на матрица), редоследот на множење на матриците би бил (x₁, y₁, z₁) = t * r * s * (x, y, z), каде што t, r и s се транслаторната, ротационата и матрицата за скаларно зголемување, соодветно.
Матриците се користат поради нивната едноставност. Потребна е една матрица, што ги содржи сите посакувани трансформации, за да се аплицираат трансформациите на сите точки на телото. Ротациjата на сите точки околу x-оската се врши преку користење на горенаведената Rx матрица, чиj агол 𝛳 (во степени) е променлива во апликациjата. Бидеjќи ротациjата се врши сè додека аголот на ротациjа не достигне 360º, при помали вредности за аголот се добива попрецизна проценка на кружница во вид на многуаголник.
Знаеjќи го ова, и фактот дека матриците се множат од десно кон лево (ова е специфично на OpenGL, методот на графичка растеризациjа коj го користи програмата, бидеjќи користи Column-Major вид на запис на матрица), редоследот на множење на матриците би бил (x₁, y₁, z₁) = t * r * s * (x, y, z), каде што t, r и s се транслаторната, ротационата и матрицата за скаларно зголемување, соодветно.
Матриците се користат поради нивната едноставност. Потребна е една матрица, што ги содржи сите посакувани трансформации, за да се аплицираат трансформациите на сите точки на телото. Ротациjата на сите точки околу x-оската се врши преку користење на горенаведената Rx матрица, чиj агол 𝛳 (во степени) е променлива во апликациjата. Бидеjќи ротациjата се врши сè додека аголот на ротациjа не достигне 360º, при помали вредности за аголот се добива попрецизна проценка на кружница во вид на многуаголник.
ºСлика 2: Ротација околу x-оска 360º/𝛳 пати.
а) Голема вредност за аголот 𝛳; б) Мала вредност за аголот 𝛳.
а) Голема вредност за аголот 𝛳; б) Мала вредност за аголот 𝛳.
Откако сите точки на тридимензионалното тело се зачувани, истите се користат при формирање на илјадници мали правоаголници, поврзани меѓусебно.
Слика 3: а) Помалку точки резултираат со поголема “рапавост” на телото отколку во б), каде површината на телото е “помазна”.
Извори:
[1] OpenGL, https://www.opengl.org/
[2] GitHub/function-rotator, https://github.com/limepixl/function-rotator
Автор:
Стефан Ивановски, Факултет за информатички науки и компјутерско инженерство, Универзитет „Св. Кирил и Методиј“, Скопје
Оваа тема е работена како дел од додатната настава по математика во учебната 2018-2019 година во СУГС „Георги Димитров“, Скопје, под менторство на проф. Јасмина Маркоска.
Објавено на ПОИМ:
23 декември 2019
Начин на цитирање на статијата:
С. Ивановски, Визуализација на ротација на функции со графичко програмирање, Портал ПОИМ на Институтот за математика, ПМФ, Скопје, 23 декември 2019, http://poim-pmf.weebly.com/vizualizacija-na-funkcii-so-graficko-programiranje.html
[1] OpenGL, https://www.opengl.org/
[2] GitHub/function-rotator, https://github.com/limepixl/function-rotator
Автор:
Стефан Ивановски, Факултет за информатички науки и компјутерско инженерство, Универзитет „Св. Кирил и Методиј“, Скопје
Оваа тема е работена како дел од додатната настава по математика во учебната 2018-2019 година во СУГС „Георги Димитров“, Скопје, под менторство на проф. Јасмина Маркоска.
Објавено на ПОИМ:
23 декември 2019
Начин на цитирање на статијата:
С. Ивановски, Визуализација на ротација на функции со графичко програмирање, Портал ПОИМ на Институтот за математика, ПМФ, Скопје, 23 декември 2019, http://poim-pmf.weebly.com/vizualizacija-na-funkcii-so-graficko-programiranje.html
Download (PDF)
Авторизираните статии објавени на Порталот подлежат на законска заштита. Се забранува користење на статиите без наведување на авторот или изворот.