Nie obrażaj więc mojej inteligencji poprzez czynione na pokaz zaniżanie własnej.
>
restart: Programowanie grafiki (wykresów) w Maple'u > Ad. 2. Podstawowe sposoby generowania wykresów Alternatywne sposoby wywoływania komendy plot3d > plot3d(sin(x)*sin(y),x=0..4*Pi,y=0..4*Pi); # argumentem komendy plot3d jest wyrażenie > p:=(x,y)->sin(x); q:=(x,y)->sin(y); > plot3d(p*q,0..4*Pi,0..4*Pi); # argumentem komendy plot3d są nazwy procedur > r:=proc(x,y) sin(x)*sin(y) end proc; > plot3d(r,0..4*Pi,0..4*Pi); # argumentem komendy plot3d jest nazwa procedury PowerPoint Przykład wykreślania procedury (przewaga nad wyrażeniem) > mandelbrot:=proc(x,y) local c,z,m; c:=x+I*y; z:=x+I*y; m:=0; to 10 while evalf(abs(z))<2 do z:=z^2+c; m:=m+1; end do: m; end proc; > mandelbrot(0.1,0.1); > mandelbrot(0.3,0.3); > mandelbrot(0.4,0.5); > mandelbrot(0.6,0.6); > mandelbrot(1.9999999,0); > mandelbrot(2.0000001,0); > plot3d(mandelbrot,-5/2..5/2,-5/2..5/2,grid=[75,75],orientation=[ 65,65]); Zastosowanie wybranych opcji do zmiany wyglądu wykresów > x:='x':y:='y'; > plot3d(sin(x)*sin(y),x=0..4*Pi,y=0..4*Pi,style=patchnogrid); > plot3d(mandelbrot,-5/2..5/2,-5/2..5/2,grid=[100,100],style=conto ur,axes=framed,orientation=[66,83]); Ad.3. Programowanie z wykorzystaniem bibliotecznych procedur graficznych > Wykreślanie krzywych zamkniętych > L1:=[[1,5],[2,3],[3,4],[3,7]]; # lista współrzędnych 4 punktów > plot(L1); > op(L1); > L1[1]; > L2:=[op(L1),L1[1]]; # nowa lista (wsp. 5 punktu = wsp. 1 punktu) > plot(L2); > loopplot1:=proc(L) plot([op(L),L[1]]); end proc; > loopplot1(L1); > loopplot1([[1,2],[a,b]]); Udoskonalenie procedury loopplot w taki sposób, aby sprawdzała, czy argumentem jest lista list liczb > loopplot2:=proc(L::list([constant,constant])) plot([op(L),L[1]]); end proc; > loopplot2([[1,2],[a,b]]); > loopplot2(L1,thickness=10,color=blue); Wniosek: opcje nie działają!!! Udoskonalenie procedury loopplot w taki sposób, aby umożliwiała akceptowanie dostępnych opcji args - sekwencja aktualnych parametrów przesłanych do procedury nargs - liczba parametrów przesłanych do procedury > loopplot3:=proc(L::list([constant,constant])) plot([op(L),L[1]],args[2..nargs]); end proc; > loopplot3(L1,thickness=10,color=blue); Teraz opcje działają Wykresy wstęgowe Procedura generująca wykres wstęgowy (wstęga = ribbon) na bazie listy wyrażeń funclist - lista funkcji hasoption - komenda badająca występowanie konkretnej opcji > ribbonplot1:=proc(funclist, r1::name=range) local i, m, p, y, n, opts; opts:=[args[3..nargs]]; if not hasoption(opts, 'numpoints', 'n', 'opts') then n:=25 end if; m:=nops(funclist); p:=seq(plot3d(funclist[i],r1,y=(i-1)..i, grid=[n,2],op(opts)),i=1..m); plots[display](p); end proc; > ribbonplot1([cos(x),cos(2*x),sin(x),sin(2*x)],x=-Pi..Pi,numpoint s=25); Ad.4. Struktury danych graficznych Wykresy na płaszczyźnie > plot(2*x^2+3,x=0..6,numpoints=3,adaptive=false); # bez adaptacyjnego próbkowania > plot(2*x^2+3,x=0..6,numpoints=3,adaptive=true); # z adaptacyjnym próbkowaniem > Wyświetlanie struktur danych graficznych - lprint > lprint(plot(2*x^2+3,x=0..6,numpoints=3,adaptive=false)); # bez adaptacyjnego próbkowania > lprint(plot(2*x^2+3,x=0..6,numpoints=3,adaptive=true)); # z adaptacyjnym próbkowaniem Wykresy w przestrzeni > plot3d(x*y,x=0..1,y=0..2,grid=[3,4]); > lprint(plot3d(x*y,x=0..1,y=0..2,grid=[3,4])); PowerPoint Przykład struktury danych graficznych typu PLOT (linia) > PLOT(CURVES([[0,0],[1,1]])); # lista współrzędnych 2 punktów - linia > n:=10; > punkty:=[seq([cos(i*Pi/n),sin(i*Pi/n)],i=0..n)]; # lista współrzędnych 11 punktów > PLOT(CURVES(evalf(punkty))); # zbiór linii > PLOT(CURVES(punkty)); # bez evalf > type(sin(Pi/n),numeric); PowerPoint Argumenty struktur danych graficznych > punkty:=[[0,0],[1,0],[0.5,evalf(sqrt(3))/2]]; # wierzchołki trójkąta równobocznego > PLOT(CURVES(punkty),COLOR(RGB,0,0,1),AXESSTYLE(NONE)); > PLOT(POLYGONS(punkty),COLOR(RGB,1,0,0),AXESSTYLE(NONE),SCALING(C ONSTRAINED)); > op(punkty); > PLOT(POINTS(op(punkty),SYMBOL(DIAMOND,40)),COLOR(RGB,0,0,1),AXES STYLE(NONE),SCALING(CONSTRAINED)); > PLOT(TEXT([0,0],"Jak się macie?",COLOR(RGB,0,0,1)),FONT(HELVETICA,BOLD,40),AXESSTYLE(NONE )); Wykreślanie równoczesne różnych struktur graficznych > PLOT(CURVES([[0,0],[evalf(sqrt(3)/2*cos(Pi/6)),evalf(sqrt(3)/2*s in(Pi/6))]],[[0.5,0],[0.5,evalf(sqrt(3)/2)]],[[1,0],[1-evalf(sqr t(3)/2*cos(Pi/6)),evalf(sqrt(3)/2*sin(Pi/6))]],LINESTYLE(3),COLO R(RGB,0,0,0)),POLYGONS(punkty,COLOR(RGB,1,0,0)),TEXT([0.5,evalf( sqrt(3)/7)],"Środek",COLOR(RGB,1,1,0)),FONT(HELVETICA,BOLD,10),P OINTS([0.5,evalf(sqrt(3)/6)],SYMBOL(CROSS,20),COLOR(RGB,1,1,0)), SCALING(CONSTRAINED),AXESSTYLE(NONE)); PowerPoint Generowanie kolorowych histogramów > PLOT(POLYGONS([[10,0],[10,1],[11,1.05],[11,0]],COLOR(HUE,0.59)), VIEW(0..20,0..1.5)); Generowanie punktów trapezów > n:=10; > tr:=i->[[(i-1)/n,0],[(i-1)/n,sin((i-1)/n)],[i/n,sin(i/n)],[i/n,0 ]]; # trapezy > h:=i->abs(cos(i/n)): # funkcja sterująca kolorem > PLOT(seq(POLYGONS(evalf(tr(i)),COLOR(HUE,evalf(h(i)))),i=1..roun d(2*Pi*n))); > plot(h(i),i=0..round(2*Pi*n)); > h:=i->(round(2*Pi*n)-i)/round(2*Pi*n): # inna funkcja sterująca kolorem > plot(h(i),i=0..round(2*Pi*n)); > PLOT(seq(POLYGONS(evalf(tr(i)),COLOR(HUE,evalf(h(i)))),i=1..roun d(2*Pi*n))); PowerPoint Wykreślanie sum częściowych szeregów liczbowych > restart: > s:=Sum(1/k^2,k=1..20); # wersja bierna komendy "sum" > #?typematch > typematch(s,'Sum'(term::algebraic,n::name=a::integer..b::integer )): # przypisanie komponentom sumy nazw > term,n,a,b; > sum(term,n=a..a+2); # suma trzech kolejnych wyrazów > 1+1/4+1/9; > a,b; Pomocnicza procedura wyliczająca wartość m-tej sumy częściowej > psum:=evalf@unapply(Sum(term,n=a..(a+m)),m): > points:=[seq([[i,psum(i)],[i+1,psum(i)]],i=1..(b-a+1))]: > points:=map(op,points): > PLOT(CURVES(points),COLOR(RGB,1,0,0),THICKNESS(5)); > Sum(1/k^2,k=1..infinity): %=value(%); > evalf(rhs(%)); Procedura ujmująca wszystkie kroki > sumplot:=proc(s) local term, n, a, b, psum, m, points, i; if typematch(s,'Sum'(term::algebraic,n::name=a::integer..b::integer )) then psum:=evalf@unapply(Sum(term, n=a..(a+m)),m); points:=[seq([[i,psum(i)],[i+1,psum(i)]],i=1..(b-a+1))]; points:=map(op,points); PLOT(CURVES(points)); else error "expecting a Sum structure as input" end if; end proc; > sumplot(Sum(1/k^2,k=1..50)); > sumplot(Sum((-1)^k/k,k=1..150)); > Sum((-1)^k/k,k=1..infinity): %=value(%); > gran:=evalf(rhs(%)); > p1:=sumplot(Sum((-1)^k/k,k=1..150)):p2:=plot(gran,k=1..150):plot s[display]([p1,p2]); > sumplot(Sum(1/k,k=1..50)); > Sum(1/k,k=1..infinity): %=value(%); PowerPoint Struktury danych graficznych trójwymiarowych - PLOT3D Data Structure Przykładowe wykresy trójwymiarowych strktur > PLOT3D(CURVES([[3,3,0],[0,3,1],[3,0,1],[3,3,0]]),AXESSTYLE(FRAME )); > PLOT3D(POLYGONS([[3,3,0],[0,3,1],[3,0,1]]),COLOR(RGB,0.5,0.5,0.5 ),AXESSTYLE(FRAME)); > PLOT3D(POINTS([3,3,0],[0,3,1],[3,0,1],SYMBOL(CROSS,20),COLOR(RGB ,0,0,1)),AXESSTYLE(FRAME)); > PLOT3D(TEXT([0,0,0],"Hello",COLOR(RGB,0,0,1)),FONT(HELVETICA,BOL D,20),AXESSTYLE(FRAME)); Histogram trójwymiarowy Budowa kolorowego pudła > yellowsides:=proc(x,y,z,u) POLYGONS([[x,y,0],[x+u,y,0],[x+u,y,z],[x,y,z]], [[x,y,0],[x,y+u,0],[x,y+u,z],[x,y,z]], [[x+u,y,0],[x+u,y+u,0],[x+u,y+u,z],[x+u,y,z]], [[x+u,y+u,0],[x,y+u,0],[x,y+u,z],[x+u,y+u,z]], COLOR(RGB,1,1,0)); end proc; > redtop:=proc(x,y,z,u) POLYGONS([[x,y,z],[x+u,y,z],[x+u,y+u,z],[x,y+u,z]],COLOR(RGB,1,0 ,0)); end proc; > PLOT3D(yellowsides(1,2,3,0.5),redtop(1,2,3,0.5)); # poobracać Budowa histogramu > n:=4; > sides:=seq(seq(yellowsides(i,j,1/(i+j+4),0.75),j=0..n),i=0..n): > tops:=seq(seq(redtop(i,j,1/(i+j+4),0.75),j=0..n),i=0..n): > PLOT3D(sides, tops); > PLOT3D(sides, tops, AXESSTYLE(BOXED)); PowerPoint Ad.5. Programowanie z wykorzystaniem struktur danych graficznych Tworzenie własnych bazowych elementów graficznych (primitives) za pomocą procedur wykorzystujących struktury graficzne > with(plots): > linia:=proc(x::list,y::list) |
Menu
|