w14 b, Inżynierskie, Semestr III, Metody obliczeniowe, Wyklady

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)
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • alter.htw.pl
  • Powered by WordPress, © Nie obrażaj więc mojej inteligencji poprzez czynione na pokaz zaniżanie własnej.