Gráficos de funções de 2 variáveis:
> restart; with(plots):
> plot3d(x^2-y^2, x=-1..1, y=-1..1, title=`Uma sela`); # uma função
> plot3d({x^2-y^2, x^2+y^2}, x=-1..1, y=-1..1, title=`Sela e parabolóide`); Assim não dá para mudar certas opções --- será que dá para imitar o procedimento 2D?
> sela := plot3d(x^2-y^2, x=-1..1, y=-1..1, style=patchnogrid):
> parab := plot3d(x^2+y^2, x=-1..1, y=-1..1, style=wireframe, color=red):
> display({sela, parab}); Agora sim!
> animate3d((s*x)^2 + (s*y)^2, x=-1..1, y=-1..1, s=0..1); Animação simples
> animate3d({(s*x)^2+(s*y)^2, x^2+y^2}, x=-1..1, y=-1..1, s=0..1); Animação simultanea simples
Curvas parametrizadas no espaço
> restart; with(plots):
> spacecurve([cos(t), sin(t),t], t=0..5*Pi, scaling=constrained); uma curva parametrizada
> spacecurve({[cos(t), sin(t),t], [0,0,t]}, t=0..5*Pi, scaling=constrained); duas curvas
> tubeplot([cos(t), sin(t),t], t=0..5*Pi, radius=.2, scaling=constrained, orientation=[40,10]); tubo envolvendo a curva
Como não há animatespacecurve... pode-se criar um procedimento
>
animacurva := proc(func, tvar::range, svar::range, N::posint)
local s, s0, s1, quadro, i;
> with(plots):
> s0 := lhs(svar): s1 := rhs(svar):
> quadro[0] := spacecurve(func(t, s0), t=tvar):
> for i from 1 to N-1 do
> s := s0 + i*(s1-s0)/(N-1);
> quadro[i] := spacecurve(func(t, s), t=tvar):
> od:
> display([seq(quadro[i], i=0..N-1)], insequence=true);
> end:
A função criada acima tem como parâmetros de entrada:
func : uma função de 2 variáveis, sendo a segunda variável o parâmetro da animação.
tvar: variação do primeiro parâmetro
svar: variação do parâmetro de animação
N: número de quadros da animação (frames)
> animacurva((t, s) -> [cos(t), sin(t), t*s], 0..4*Pi, 0..1, 10); # aplicando...
Superfícies parametrizadas
> restart; with(plots):
>
xi := (u, v) -> [u*cos(v), u*sin(v), u];
parametrização de uma superfície
= [x(u,v], y(u,v), z(u,v)]
> plot3d(xi(u,v), u=0..1, v=0..2*Pi); plotando a superfície acima
> plot3d({xi(u,v), xi(-u,v)}, u=0..1, v=0..2*Pi); plotando duas superfícies (neste caso, apenas outra reparametrização)
> animate3d(xi(u, v*s), u=0..1, v=0..2*Pi, s=0..1, style=wireframe, color=blue); anima1:= %: animando e gravando em anima1
> fig := plot3d(xi(u, v), u=0..1, v=0..2*Pi, style=wireframe): gravando a figura em fig
> display({fig, anima1}); animação mais figura estática
Plotando superfícies implícitas:
> restart; with(plots): limpando e recarregando o pacote...
> implicitplot3d(x^2+y^2-z^2=1, x=-2..2, y=-2..2, z=-2..2,style=wireframe);
Animação com superfícies implicitas: só construindo:
> s0 := -1: s1 := 1: variação do parâmetro s de animação
> quadro[0] := implicitplot3d(x^2 + s0*y^2-z^2=1, x=-2..2, y=-2..2, z=-2..2): primeiro quadro
> for i from 1 to 10 do os outros quadros
> s := s0 + i*(s1-s0)/10;
> quadro[i] := implicitplot3d(x^2+s*y^2-z^2=1, x=-2..2, y=-2..2, z=-2..2):
> od:
> display([seq(quadro[i], i=0..10)],insequence=true, scaling=constrained); finalmente a animação
Veja a lista dos comandos gráficos do pacote plots e plottools.
> with(plots);
> with(plottools);
Voltar para o Sumário