Građevinski fakultet Sveučilišta u Zagrebu
Osnove inženjerske informatike II (Mathematica)
7. predavanje

2D grafika

Funkcija Graphics - 2DPrimitivi

Funkcija Graphics, između ostalog, omogućuju crtanje 2D primitiva,

•  Sintaksa za crtanje  primitiva je sljedeća:
Graphics[ 2Dprimitiv ]

•  Sintaksa  za crtanje više primitiva je sljedeća:
Graphics[ { 2Dprimitiv 1, 2Dprimitiv 2,..... } ]

•  Opcije za crtanje dodaju se na sljedeći način:
Graphics[ { opcija1,opcija2,....,2Dprimitiv } ]

2D primitivi

Point[{x,y}]

Točka s koordinatama (x,y).

Line[{{(Subscript[x, 1]),(Subscript[y, 1])},{(Subscript[x, 2]),(Subscript[y, 2])},..}]

Dužina ili više dužina koji su spojnice točaka  ((Subscript[x, 1]),(Subscript[y, 1])),((Subscript[x, 2]),(Subscript[y, 2])),..

Arrow[{{(Subscript[x, 1]),(Subscript[y, 1])},{(Subscript[x, 2]),(Subscript[y, 2])}}]

Strijelica na kraju spojnice točaka  ((Subscript[x, 1]),(Subscript[y, 1])) i ((Subscript[x, 2]),(Subscript[y, 2])).

Polygon[{{(Subscript[x, 1]),(Subscript[y, 1])},{(Subscript[x, 2]),(Subscript[y, 2])},{(Subscript[x, 3]),(Subscript[y, 3])},....}]

Poligon čiji su vrhovi redom točke   ((Subscript[x, 1]),(Subscript[y, 1])),((Subscript[x, 2]),(Subscript[y, 2])),((Subscript[x, 3]),(Subscript[y, 3])),....

Rectangle[{{(Subscript[x, 1]),(Subscript[y, 1])},{(Subscript[x, 2]),(Subscript[y, 2])}}]

Kvadrat kojem su  točke  ((Subscript[x, 1]),(Subscript[y, 1])) i ((Subscript[x, 2]),(Subscript[y, 2])) krajnje  jedne dijagonale.

Circle[{x,y},r]

Kružnica s koordinatama središta (x,y) i polumjerom r.

Disk[{x,y},r]

Krug s koordinatama središta (x,y) i polumjerom r.

Text[tekst,{x,y}]

Ispisuje tekst koji je centriran u točku (x,y).

Primjeri

Graphics[
{
Point[{3,3}],
Line[{{3,0},{-2,6}}],
Arrow[{{0,0},{0,3}}],
Polygon[{{-2,2},{-2,4},{-4,5},{-4,3}}],
Rectangle[{4,0},{6,2}],
Circle[{3,4},2],
Disk[{-2,2},1],
Text[volim crtat u Mathematici,{3,7}]
}
]

Uz dodatne opcije

Graphics[
{
{Red,AbsolutePointSize[5],Point[{3,3}]},
{Blue,AbsoluteThickness[2],Line[{{3,0},{-2,6}}]},
{AbsoluteDashing[{5,2}],Arrow[{{0,0},{2,0}}]},
{Orange,Polygon[{{-2,2},{-2,4},{-4,5},{-4,3}}]},
{Red,Rectangle[{4,0},{6,2}]},
{Green,Circle[{3,4},2]},
{Brown,Opacity[0.5],EdgeForm[Red],Disk[{-2,2},1]},
Text["volim crtat u Mathematici",{3,7}]
}
]

Funkcija Plot

Ovu funkcija, koja omogućuje crtanje grafa eksplicitno zadane funkcije jedne varijable y=f(x), upoznali ste na 3. predavanju i do sada ju koristili u većem broju primjera. Preko nje ste naučili osnove sintakse Mathematica naredbi za crtanje te neke grafičke opcije (AspectRatio, PlotStyle, AxesLabel, Filling i dr.)
Te ćete opcije, kao i mnoge druge,  moći  koristiti i u gotovo svim ostalim Mathematica funkcijama za crtanje ravninskih krivulja.

Funkcija ParametricPlot

Mathematica funkcija koja omogućuje crtanje parametarski zadanih krivulja je ParametricPlot.
Za crtanje krivulje zadane parametarskim jednadžbama
(Subscript[f, x]) = x(t)
 (Subscript[f, y]) = y(t),  t ϵ I ⊂ ℜ
 sintaksa je sljedeća:
ParametricPlot [ {(Subscript[f, x]),(Subscript[f, y])} , {t,(Subscript[t, min]),(Subscript[t, max])} ] 
Za crtanje više parametarski zadanih krivulja na istom crtežu sintaksa je sljedeća:
ParametricPlot [ {{(Subscript[f, x]),(Subscript[f, y])},{(Subscript[g, x]),(Subscript[g, y])},.....} , {t,(Subscript[t, min]),(Subscript[t, max])} ]

Primjeri 1

Jedinična kružnica sa središtem u ishodištu.

ParametricPlot[{Cos[t],Sin[t]},{t,0,2Pi}]

Elipsa s poluosima a, b i koordinatama središta (p,q).

ParametricPlot[{3Cos[t]+2,2Sin[t]-1},{t,0,2Pi}]

elipsa[a_,b_,p_,q_]:={a*Cos[t]+p,b*Sin[t]+q}

ParametricPlot[{elipsa[4,3,0,0],elipsa[2,5,1,1]},{t,0,2Pi}]

Hiperbola s poluosima a, b i koordinatama središta (p,q).

hiperbola[a_,b_,p_,q_]:={a*Cosh[t]+p,b*Sinh[t]+q}

ParametricPlot[hiperbola[2,2,0,0],{t,-2Pi,2Pi}]

Upotrijebimo opciju PlotRange

ParametricPlot[hiperbola[2,2,0,0],{t,-2Pi,2Pi},PlotRange->{{-5,5},{-5,5}}]

ParametricPlot[{hiperbola[2,2,0,0],-hiperbola[2,2,0,0]},{t,-2Pi,2Pi},PlotRange->{{-5,5},{-5,5}}]

hiperbola1[a_,b_,p_,q_]:={a*Sec[t]+p,b*Tan[t]+q}

ParametricPlot[hiperbola1[2,2,0,0],{t,0,2Pi}]

Primjeri 2

Cikloida

cikloida[a_,b_]:={a*t-b*Sin[t],a-b*Cos[t]}

ParametricPlot[cikloida[2,3],{t,0,4Pi}]

ParametricPlot[{cikloida[2,3],cikloida[2,2],cikloida[2,1]},{t,0,4Pi},PlotStyle->{Red,Blue,Green}]

ANIMACIJA izvođenja cikloide

cycloid[a_,b_][t_]:={a*t-b*Sin[t],a-b*Cos[t]}
circ[i_]:=
Graphics[{Hue[0.13,0.5],Disk[{i,1},1]}]
curve[a_,b_][i_]:=ParametricPlot[cycloid[a,b][t],{t,-Pi/100,i},PlotStyle->{AbsoluteThickness[2],Hue[0.7]}]
cent[i_]:=
Graphics[{AbsolutePointSize[3],Point[{i,1}]}]
rad1[i_]:=
Graphics[{Hue[0.3],Line[{{i,1},cycloid[1,1.5][i]}]}]
rad2[i_]:=
Graphics[{Hue[0.3],Line[{{i,1},cycloid[1,1][i]}]}]
rad3[i_]:=
Graphics[{Hue[0.3],Line[{{i,1},cycloid[1,0.5][i]}]}]
po1[i_]:=
Graphics[{AbsolutePointSize[6],Hue[1],Point[cycloid[1,1.5][i]]}]
po2[i_]:=
Graphics[{AbsolutePointSize[6],Hue[1],Point[cycloid[1,1][i]]}]
po3[i_]:=
Graphics[{AbsolutePointSize[6],Hue[1],Point[cycloid[1,0.5][i]]}]
lin=
Graphics[{White,Line[{{-Pi/2,0},{13Pi/2,0}}]}];

Manipulate[
GraphicsGrid[
{{Show[circ[i],curve[1,1.5][i],cent[i],rad1[i],lin,po1[i],
PlotRange->{{-Pi/2,9Pi/2},{-1,3}}]},
{Show[circ[i],curve[1,1][i],cent[i],rad2[i],lin,po2[i],
PlotRange->{{-Pi/2,9Pi/2},{-1,3}}]},
{Show[circ[i],curve[1,.5][i],cent[i],rad3[i],lin,po3[i],
PlotRange->{{-Pi/2,9Pi/2},{-1,3}}]}},Background->Black,Axes->None,ImageSize->{500,500}],
{i,0,4Pi,Pi/10}]

Funkcija PolarPlot

Mathematica funkcija koja omogućuje crtanje ravninskih krivulja koje su u polarnom koordinatnom sustavu (r,φ) dane jednadžbama oblika r = r(φ)  je  PolarPlot.
Sintaksa za  korištenje te naredbe je sljedeća:
PolarPlot[ r(φ), {φ,(Subscript[φ, min]),(Subscript[φ, max])}]
Za crtanje više krivulja na istom crtežu sintaksa je sljedeća:
PolarPlot [ {(Subscript[r, 1])(φ),(Subscript[r, 2])(φ),.....} , {φ,(Subscript[φ, min]),(Subscript[φ, max])}]

Primjeri

Kružnica

PolarPlot[Cos[u],{u,0,Pi}]

PolarPlot[{Cos[u],Sin[u]},{u,0,Pi},PlotStyle->{Blue,Red}]

Arhimedova spirala

arhspirala[a_]:=a*u

PolarPlot[arhspirala[1],{u,0,8Pi}]

Manipulate[PolarPlot[{arhspirala[1],arhspirala[-1]},{u,0,k},PlotStyle->{Blue,Red},PlotRange->{{-26,26},{-25,25}}],{k,0.1,8Pi}]

Manipulate[PolarPlot[{arhspirala[1],arhspirala[2]},{u,0,k},PlotStyle->{Blue,Red},PlotRange->{{-50,55},{-50,50}}],{k,0.1,8Pi}]

Logaritamska spirala

logspir[a_]:=a^u

PolarPlot[logspir[9/10],{u,0,10Pi}]

PolarPlot[logspir[11/10],{u,0,10Pi}]

Manipulate[PolarPlot[{logspir[1.1],logspir[0.9]},{u,0,k},PlotStyle->{Blue,Red},PlotRange->{{-10,12},{-10,8}}],{k,0.1,8Pi}]

Primjer rotacije

PolarPlot[Sin[3u],{u,0,2Pi}]

Table[PolarPlot[Sin[k*u],{u,0,Pi}],{k,3,9,2}]

Table[PolarPlot[Sin[2k*u],{u,0,2Pi}],{k,1,4,1}]

Manipulate[PolarPlot[Sin[2u+v],{u,0,2Pi},PlotRange->{{-1.1,1.1},{-1.1,1.1}},Axes->None],{v,0,2Pi}]

Manipulate[PolarPlot[{Sin[-2u+v],Sin[2u+v]},{u,0,2Pi},PlotRange->{{-1.1,1.1},{-1.1,1.1}},Axes->None],{v,0,2Pi}]

Funkcija ContourPlot

Mathematica funkcija koja omogućuje crtanje implicitno zadanih ravninskih krivulja, tj. skupova točaka čije Kartezijeve koordinate (x,y)  zadovoljavaju neku jednadžbu f(x,y)=0, je  ContourPlot.
Ova funkcija ima širu namjenu, ali ju možemo koristiti za crtanje implicitno zadanih krivulja na sljedeći način:
	Za crtanje jedne  krivulje koja je zadana  jednadžbom f(x,y)=0, sintaksa je:
ContourPlot[ jednadžba, {x,(Subscript[x, min]),(Subscript[x, max])},{y,(Subscript[y, min]),(Subscript[y, max])}] 
	Za crtanje više implicitno zadanih krivulja na istom crtežu sintaksa je:
ContourPlot [ {(Subscript[jednadžba, 1]),(Subscript[jednadžba, 2]),.....} , {x,(Subscript[x, min]),(Subscript[x, max])},{y,(Subscript[y, min]),(Subscript[y, max])}]

Primjeri 1

ContourPlot[x^2+y^2==1,{x,-1,1},{y,-1,1}]

Options[ContourPlot]

ContourPlot[{x^2/9+y^2/4==1,x^2/9-y^2/4==1},{x,-6,6},{y,-5,5},ContourStyle->{Hue[1],Hue[0.7]},Axes->True]

Primjer 2

Cassinijevi ovali.

cassini[a_,f_]:=(x^2+y^2)^2-2f^2(x^2-y^2)==a^4-f^4

ContourPlot[cassini[1,1],{x,-1.5,1.5},{y,-0.5,0.5}]

ContourPlot[cassini[1,1]//Evaluate,{x,-1.5,1.5},{y,-0.5,0.5}]

ContourPlot[cassini[1,1]//Evaluate,{x,-1.5,1.5},{y,-0.5,0.5},AspectRatio->Automatic]

ContourPlot[Table[cassini[a,1],{a,0.7,1.3,0.1}]//Evaluate,{x,-2,2},{y,-1,1},ContourStyle->Table[Hue[i],{i,0.3,0.9,0.1}],
AspectRatio->Automatic]

Osnovna namjena funkcije ContourPlot je crtanje nivo linija realne funkcije dviju varijabli z = f (x,y).
Nivo linija je krivulja u ravnini XOY dana jednadžbom f (x,y)=C, gdje je C bilo koji broj koji pripada području vrijednosti funkcije f.
Naredbom:
ContourPlot[ (Subscript[f, x,y]), {x,(Subscript[x, min]),(Subscript[x, max])},{y,(Subscript[y, min]),(Subscript[y, max])}] 
dobivamo Mathematica prikaz tlocrta plohe z = f (x,y) s istaknutim nivo linijama u području ((Subscript[x, min]),(Subscript[x, max]))×((Subscript[y, min]),(Subscript[y, max])).

Primjeri

Hiperbolički paraboloid 1 - jednadžba plohe je z = x y

Plot3D[x*y,{x,-2,2},{y,-2,2},BoxRatios->{1,1,1}]

ContourPlot[x*y,{x,-2,2},{y,-2,2}]

ContourPlot[x*y,{x,-2,2},{y,-2,2},Contours->{-2,-1.5,-1,-0.5,0,0.5,1,1.5,2}]

ContourPlot[x*y,{x,-2,2},{y,-2,2},Contours->Table[i,{i,-2,2,0.1}]]

ContourPlot[x*y,{x,-2,2},{y,-2,2},Contours->{1}]

ContourPlot[x*y==1,{x,-2,2},{y,-2,2}]

Hiperbolički paraboloid 2 - jednadžba plohe je z = (x^2) - (y^2)

Plot3D[x^2-y^2,{x,-2,2},{y,-2,2},BoxRatios->{1,1,1}]

ContourPlot[x^2-y^2,{x,-2,2},{y,-2,2}]

ContourPlot[x^2-y^2,{x,-2,2},{y,-2,2},Contours->{1}]

ContourPlot[x^2-y^2==1,{x,-2,2},{y,-2,2}]

Polukugla

Plot3D[Sqrt[1-x^2-y^2],{x,-1,1},{y,-1,1}]

ContourPlot[Sqrt[1-x^2-y^2],{x,-1,1},{y,-1,1}]

ContourPlot[Sqrt[1-x^2-y^2],{x,-1,1},{y,-1,1},Contours->{0.9}]

Primjer nealgebarske plohe - jednadžba plohe je z = sinx cosy

Plot3D[Sin[x]*Sin[y],{x,-2Pi,2Pi},{y,-2Pi,2Pi}]

ContourPlot[Sin[x]*Sin[y],{x,-2Pi,2Pi},{y,-2Pi,2Pi}]

ContourPlot[Sin[x]*Sin[y],{x,-2Pi,2Pi},{y,-2Pi,2Pi},ColorFunction->"Rainbow"]

ContourPlot[{Sin[x]*Sin[y]==-0.25,Sin[x]*Sin[y]==-0.75},{x,-2Pi,2Pi},{y,-2Pi,2Pi},ContourStyle->{Red,Yellow},Background->Black]

ContourPlot[Sqrt[1-x^2-y^2],{x,-1,1},{y,-1,1},Contours->{0.9}]

Funkcija RegionPlot

Za grafički prikaz rješenja nejednadžbi koristimo funkciju   RegionPlot.
Sintaksa je sljedeća:
RegionPlot[ izraz, {x,(Subscript[x, min]),(Subscript[x, max])},{y,(Subscript[y, min]),(Subscript[y, max])}]
Mathematica  prikazuje dio ravnine unutar pravokutnika ((Subscript[x, min]),(Subscript[x, max]))×((Subscript[y, min]),(Subscript[y, max])) za koji vrijedi izraz.
izraz može biti bilo koja nejednadžba od dvije varijable (x i y) ili logička kombinacija takvih nejednadžbi.
Logički operatori:
ili   -   ||
i    -   &&
ne -   !

Primjeri

Krug

RegionPlot[x^2+y^2<1,{x,-1,1},{y,-1,1}]

RegionPlot[!(x^2+y^2<1),{x,-1,1},{y,-1,1}]

RegionPlot[{x^2+y^2<1,(x-1)^2+y^2<1},{x,-1,2},{y,-1,1},AspectRatio->Automatic]

RegionPlot[x^2+y^2<=1||(x-1)^2+y^2<=1,{x,-1,2},{y,-1,1},AspectRatio->Automatic]

RegionPlot[x^2+y^2<=1&&(x-1)^2+y^2<=1,{x,-1,2},{y,-1,1},AspectRatio->Automatic]

RegionPlot[
(x^2+y^2<=1||(x-1)^2+y^2<=1)
&&
!(x^2+y^2<=1&&(x-1)^2+y^2<=1),
{x,-1,2},{y,-1,1},AspectRatio->Automatic]

RegionPlot[x^2+y^2<4&&x^2+y^2>1||x^2+y^2<1/4,{x,-2,2},{y,-2,2}]

cosx cosy

Plot3D[Sin[x]*Sin[y],{x,-4Pi,4Pi},{y,-4Pi,4Pi}]

ContourPlot[Sin[x]*Sin[y]==1/8,{x,-4Pi,4Pi},{y,-4Pi,4Pi}]

RegionPlot[Sin[x]*Sin[y]>1/8,{x,-4Pi,4Pi},{y,-4Pi,4Pi}]

RegionPlot[Sin[x]*Sin[y]>1/8,{x,-4Pi,4Pi},{y,-4Pi,4Pi},
BoundaryStyle->{Yellow,AbsoluteThickness[2]},Background->Black,ColorFunction->Function[{x,y},Hue[x]]]

Cvjetić

tr1=RegionPlot[(x^2+y^2)^2-x(3y^2-x^2)<0,{x,-1,1},{y,-1,1},ColorFunction->"DarkBands"]

tr2=RegionPlot[(x^2+y^2)^2+x(3y^2-x^2)<0,{x,-1,1},{y,-1,1},ColorFunction->"BrightBands"]

RegionPlot[(x^2+y^2)^2-x(3y^2-x^2)<0||(x^2+y^2)^2+x(3y^2-x^2)<0,{x,-1,1},{y,-1,1}]

Show[tr1,tr2,Background->GrayLevel[0.5],FrameTicks->None]

Funkcija Show

Show je vrlo važna funkcija u Mathematica grafici, kako za 2D grafiku tako i za 3D grafiku.
Ona omogućuje prikaze većeg broja grafika na istom crtežu (outputu).
Sintaksa je sljedeća:
Show[ grafika, opcije]
ili
Show [(Subscript[grafika,   1]),(Subscript[grafika,   2]),....., opcije]
Opcije navedene u naredbi Show poništavaju one koje su navedene u grafikama.

Primjer

g1=Plot[x^2,{x,-2,2},PlotStyle->Hue[1]]

g2=ParametricPlot[{Cos[u],Sin[u]},{u,0,2Pi},PlotStyle->Hue[0.7]]

g3=ContourPlot[x^2-y^2==1,{x,-2,2},{y,-2,2},ContourStyle->Hue[0.3]]

Show[g1,g2,g3]

Mathematica  za prikaz koristi opcije prve grafike, tj. na gornjem crtežu AspectRatio i PlotRange su oni koje koristi  naredba Plot u g1.
Promijenimo li redoslijed grafika, neka je prva grafika g3 ili g2, Show će koristiti drukčije opcije.

Show[g3,g2,g1]

Show[g2,g3,g1]

Show[g1,g2,g3,AspectRatio->Automatic,PlotRange->{{-2,2},{-2,2}}]

Zadatak

1.) Nacrtajte graf funkcije  f(x)=x+sin((x^2)+5) nad intervalom (1,4), crvenom bojom istaknite na njemu točku za koju je x=2.7 te u toj točki nacrtajte tangentu na graf funkcije.
2.) Pomoću funkcije Manipulate prikažite kako se mijenja položaj tangente kada se točka giba po grafu.

f[x_] := x+Sin[x^2+5]

Show[
Plot[f[x],{x,1,4}],
Graphics[{AbsolutePointSize[6],Red,Point[{2.7,f[2.7]}]}],
ContourPlot[y-f[2.7]==(D[f[t],t]/.{t->2.7})(x-2.7),{x,2.7-1,2.7+1},{y,f[2.7]-1,f[2.7]+1},ContourStyle->Black]
]

Manipulate[Show[
Plot[f[x],{x,1,4},AxesOrigin->{0,0},AxesLabel->{x,"f(x)"}],
Graphics[{AbsolutePointSize[6],Red,Point[{u,f[u]}]}],
ContourPlot[y-f[u]==(D[f[t],t]/.{t->u})(x-u),{x,u-1,u+1},{y,f[u]-1,f[u]+1},ContourStyle->Black],
Graphics[Text[{u,f[u]},{1,4.4}]]],{u,1,4}]

Notebook izradili: Sonja Gorjanc, Vladimir Benić