# Tema CS7: Gráficos y animaciones

## Gráficos en el plano con plot2d

### Coordenadas cartesianas

Ejercicio 1.1. Dibujar la gráfica de sin(2*x) para x entre -2*pi y 2*pi.

wxplot2d(sin(2*x),[x,-2*%pi,2*%pi])$

Ejercicio 1.2. Dibujar las gráficas de x^2 y de sqrt(2*x) para x entre -2 y 2.

wxplot2d([x^2,sqrt(2*x)],[x,-2,2])$

Ejercicio 1.3. Dibujar la gráfica de x/(x^2-4) para x entre -6 y 6 e y entre
-6 y 6.

wxplot2d(x/(x^2-4),[x,-6,6],[y,-6,6])$

Ejercicio 1.4. Dibujar la gráfica de x/(x^2-4) para x entre -6 y 6 e y entre
-6 y 6 con ambos ejes con el mismo tamaño en pantalla.

wxplot2d(x/(x^2-4),[x,-6,6],[y,-6,6],
            [gnuplot_preamble, "set size ratio 1;"])$

Ejercicio 1.5. Dibujar la gráfica de x/(x^2-4) para x entre -6 y 6 e y entre
-6 y 6 con una malla.

wxplot2d(x/(x^2-4),[x,-6,6],[y,-6,6],
                 [gnuplot_preamble, "set grid;"])$

Ejercicio 1.6. Dibujar las gráficas de sqrt(1-x^2) y de sqrt(1-x^2) para x e y
entre -1 y 1.

wxplot2d([sqrt(1-x^2),-sqrt(1-x^2)],[x,-1,1],[y,-1,1])$

Ejercicio 1.7. Dibujar las gráficas de sqrt(1-x^2) y de sqrt(1-x^2) para x e y
entre -1 y 1 con ambos ejes con el mismo tamaño en pantalla.

wxplot2d([sqrt(1-x^2),-sqrt(1-x^2)],[x,-1,1],[y,-1,1],
                 [gnuplot_preamble, "set size ratio 1;"])$

### Gráficas de funciones definidas a trozos

Ejercicio 1.8. Dibujar la gráfica de la función 
   f(x) = sqrt(-x), si x<0
        = x^3,      e.o.c.

f(x):= if x<0 then sqrt(-x) else x^3$
wxplot2d(f(x),[x,-9,9],[y,-1,6])$

### Gráficos en coordenadas paramétricas

Ejercicio 1.9. Un astroide es una curva trazada por un punto fijo de un círculo 
de radio r que rueda sin deslizar dentro de otro círculo fijo de radio 4r. 
Sus ecuaciones paramétricas son:
   x = cos(t)^3
   y = sin(t)^3
Dibujar un astroide.

wxplot2d(['parametric, cos(t)^3, sin(t)^3, [t, 0, 2*%pi], [nticks, 300]])$

### Gráficas de curvas poligonales

Ejercicio 1.10. Dibujar la recta que une los puntos (0,6) y (5,1).

wxplot2d([discrete,[0,5],[6,1]], [x,-5,5])$

wxplot2d([discrete,[[0,6],[5,1]]], [x,-5,5])$

Ejercicio 1.11. Dibujar la recta que une los puntos (0,6), (5,1) y (8,3).

wxplot2d([discrete,[0,5,8],[6,1,3]], [x,-5,10])$

wxplot2d([discrete,[[0,6],[5,1],[8,3]]], [x,-5,10])$

Ejercicio 1.12. Dibujar el rombo de vértices (-1,0), (0,-2), (1,0) y (0,2).

wxplot2d([discrete,[-1,0,1,0,-1],[0,-2,0,2,0]], [x,-5,5])$

Ejercicio 1.13. Dibujar los puntos (0,0), (2,0) y (2,2).

xy:[[0,0],[2,0],[2,2]]$

wxplot2d([discrete,xy],[style,points])$

Ejercicio 1.14. Dibujar los puntos (0,0), (2,0) y (2,2) con ancho 10 y color 
rojo.

wxplot2d([discrete,xy],[style,[points,10,2]])$

Ejercicio 1.15. Dibujar el triángulo rectángulo de vértices (0,0), (2,0) y (2,2) 
con ancho 5 y los lados en rojo.

wxplot2d([discrete,[0,2,2,0],[0,0,2,0]],[style,[lines,5,2]])$

Ejercicio 1.16. Dibujar el triángulo rectángulo de vértices (0,0), (2,0) y (2,2) 
con la x entre -3 y 5, la y entre -1  y 3, el ancho 5 y los lados en verde.

wxplot2d([discrete,[0,2,2,0],[0,0,2,0]],[x,-3,5],[y,-1,3],[style,[lines,5,3]])$

Ejercicio 1.17. Dibujar el triángulo rectángulo de vértices (0,0), (2,0) y (2,2) 
con la x entre -3 y 5, la y entre -1  y 3, el ancho 5 y los lados en rojo y los 
vértices como puntos azules.

wxplot2d([[discrete,[0,2,2,0],[0,0,2,0]],[discrete,xy]],
                 [x,-3,5],[y,-1,3],
                 [style,[lines,5,2],[points,5,1,1]])$

## Gráficos con draw

Ejercicio 2.1. Cargar el módulo draw.

load(draw)$

Ejercicio 2.2. Definir coseno como el objeto que correpondiente al gráfico
en azul de la función cos(x) para x entre 0 y 4*%pi.

coseno:gr2d(
  color=blue,
  explicit(cos(x),x,0,4*%pi))$

Ejercicio 2.3. Dibujar el gráfico de coseno.

wxdraw(coseno)$

Ejercicio 2.6. Dibujar en rojo el gráfico de sen(x) para x entre 0 y 4*%pi

wxdraw2d(
  color=red,
  explicit(sin(x),x,0,4*%pi))$

Ejercicio 2.7. Dibujar la elipse de ecuación
   x = 2*cos(t),
   y = 5*sin(t)

d1: gr2d(title="Elipse",
                nticks=30,
                parametric(2*cos(t),5*sin(t),t,0,2*%pi))$

wxdraw(scene1)$

wxdraw2d(
 title="Elipse",
 color=blue,
 nticks=30,
 parametric(2*cos(t),5*sin(t),t,0,2*%pi))$

Ejercicio 2.8. Dibujar las gráficas de x^2, para x entre -1 y 1, y de la curva
definida por
   x = 2*cos(t),
   y = 5*sin(t)

wxdraw2d(
 color=red,
 explicit(x^2,x,-1,1),
 color=blue,
 nticks=30,
 parametric(cos(t),sin(t),t,0,2*%pi))$

Ejercicio 2.9. Dibujar las gráficas de cos(x), para x entre 0 y 4*pi, y de x^3, 
para x entre -5 y 5 en el marco común [0,pi]x[-2,2].

wxdraw2d(
  color=blue,
  explicit(cos(x),x,0,4*%pi),
  color=red,
  explicit(x^3,x,-5,5),
  xrange=[0,%pi],yrange=[-2,2])$

Ejercicio 2.10. Dibujar la gráfica de la función implícita definida por
   x*y=1
para x e y entre -3 y 3. Además dibujar una malla y titular la ventana como 
"Hipébola".

wxdraw2d(
  color=blue,
  nticks=100,
  implicit(x*y=1,x,-3,3,y,-3,3),
  grid=true,
  title="Hipérbola")$

Ejercicio 2.11. Dibujar la gráfica de e^(x(2), para x entre -1 y 2. Además, 
etiquetar el eje x con "Tiempo", el eje y con "Habitantes" y la ventana con
"Evolución de la población".

wxdraw2d(
 color=blue,
 explicit(exp(x/2),x,-2,2),
 xlabel="Tiempo",
 ylabel="Habitantes",
 title="Evolución de la población")$

Ejercicio 2.12. Dibujar la gráfica de cos(x), para x entre 0 y 10, rellenado de
azul la región entre la curva y la parte inferior de la ventana. 

wxdraw2d(
 fill_color=blue,
 filled_func=true,
 explicit(cos(x),x,0,10))$

Ejercicio 2.13. Dibujar la gráfica de cos(x), para x entre 0 y 10, rellenado de
azul la región entre la curva y la gráfica de sen(x).

wxdraw2d(
 fill_color=blue,
 filled_func=sin(x),
 explicit(cos(x),x,0,10))$

Ejercicio 2.14. Dibujar la gráfica de cos(x), para x entre 0 y 10, rellenado de
azul la región entre la curva y la gráfica de sen(x). Además, dibujar de rojo 
y grosor 5 la gráfica de sen(x) y de amarillo y grosor 5 la gráfica de cos(x).

wxdraw2d(
  filled_func=sin(x),
  fill_color=blue,
  explicit(cos(x),x,0,10),
  filled_func=false,
  color=red,line_width=5,
  explicit(sin(x),x,0,10),
  color=yellow,line_width=5,
  explicit(cos(x),x,0,10))$

Ejercicio 2.15.a. Definir la función f(x) = x^3-2*x^2-x+2

f(x):=x^3-2*x^2-x+2$

Ejercicio 2.15.b. Definir la función df(x) que es la derivada de f(x).

define(df(x),diff(f(x),x))$

Ejercicio 2.15.c. Definir la función tangente(x,a) que es la tangente a f(x) en
el punto de abscisa a.

tangente(x,a):=f(a)+df(a)*(x-a)$

tangente(x,a);

Ejercicio 2.15.d. Dibujar la gráfica de f(x) y su tangente en x=1. Además, 
escribir las leyendas "funcion" para f(x) y "tangente" para su tangente y 
dibujar la malla.

wxdraw2d(
  color=blue,key="funcion",
  explicit(f(x),x,-2,3),
  color=red,key="tangente",
  explicit(tangente(x,1),x,-2,3),
  grid=true)$

Ejercicio 2.16. Dibujar las gráficas de las funciones implícitas
   y^2=x^3-2x+1
   x^3+y^3 = 3xy^2-x-1
Además, la primera dibujarla en azul con la etiqueta "y^2=x^3-2x+1", la segunda 
dibujarla en rojo y con la etiqueta "x^3+y^3 = 3xy^2-x-1", etiquetar la ventana 
con "Dos funciones implicitas" y, finalmente, dibujar la malla.

wxdraw2d(
  color=blue,
  key="y^2=x^3-2x+1",
  implicit(y^2=x^3-2*x+1, x, -4,4, y, -4,4),
  color=red,
  key="x^3+y^3 = 3xy^2-x-1",
  implicit(x^3+y^3 = 3*x*y^2-x-1, x,-4,4, y,-4,4),
  title="Dos funciones implicitas",
  grid=true)$

Ejercicio 2.17. Dibujar los siguientes rectángulos 
* el de vértices opuestos (-2,-2) y (6,-1) en verde con los lados punteados 
  con grosor 6
* el de vértices opuestos (9,4) y (2,-1) en rojo con los lados de grosor 2
La ventana es la [-3,10]*[-3,4.5].

wxdraw2d(
  line_width=6,
  line_type=dots,
  transparent=false,
  fill_color=green,
  rectangle([-2,-2],[6,-1]),
  transparent=false,
  fill_color=red,
  line_type=solid,
  line_width=2,
  rectangle([9,4],[2,-1]),
  xrange=[-3,10],
  yrange=[-3,4.5])$

Ejercicio 2.18. Dibujar: 
* la elipse de centro (0,6), semieje horizontal de longitud 3, semieje vertical 
  de longitud 2, ángulo inicial 270 y amplitud -270; dibujar el borde de verde 
  con grosor 5 y el relleno de rojo. 
* la elipse de centro (2.5,6), semieje horizontal de longitud 2, semieje vertical 
  de longitud 3, ángulo inicial 30 y amplitud -90; dibujar el borde de azul 
  con grosor 5 y sin relleno.
La dimensiones de la ventana son [-3,6]x[2,9] 

wxdraw2d(
  fill_color  = red,
  color  = green,
  transparent = false,
  line_width  = 5,
  ellipse(0,6,3,2,270,-270),
  transparent = true, 
  color  = blue,
  line_width  = 3,
  ellipse(2.5,6,2,3,30,-90),
  xrange  = [-3,6],
  yrange  = [2,9] )$

Ejercicio 2.19. Dibujar 100 puntos aleatorios en [0,10]x[0,10]. Los puntos 
dibujarlos como círculos azules con grosor 2.

wxdraw2d(
  color=blue,
  point_type=filled_circle,
  point_size=2,
  points(makelist([random(10.0),random(10.0)],k,1,150)))$

Ejercicio 2.20. Dibujar 10 puntos aleatorios en [0,10]x[0,10]. Los puntos 
dibujarlos como cuadrados naranjas con grosor 3.

wxdraw2d(
    color=orange-red,
    point_type=filled_square,
    point_size=3,
    points(makelist(random(10.0),k,1,10),
                makelist(random(10.0),k,1,10)))$

Ejercicio 2.21. Dibujar en la ventana de dimensiones [0,12]x[0,10]
* el vector de origen (0,1) y desplazamiento (5,5) con cabeza de longitud 1,
* el vector de origen (3,1) y desplazamiento (5,5) con la cabeza vacía y
* el vector de origen (6,1) y desplazamiento (5,5) con cabezas en ambos extremos
  sin rellenar y punteado.

wxdraw2d(
   xrange  = [0,12],
   yrange  = [0,10],
   head_length = 1,
   vector([0,1],[5,5]), 
   head_type = 'empty,
   vector([3,1],[5,5]),
   head_both = true,
   head_type = 'nofilled,
   line_type = dots,
   vector([6,1],[5,5]))$

## Animaciones gráficas

### Animaciones del seno

Ejercicio 3.1. Crear una animación de la función sen(x+n), donde el parámetro n 
va a tomar los valores desde 1 a 20 y el marco es [-2*pi,2*pi]x[-1.1,1.1].

with_slider(
   n,
   makelist(i,i,1,20),
   sin(x+n),
   [x,-2*%pi,2*%pi],[y,-1.1,1.1])$

Ejercicio 3.2. Crear una animación de la función sen(x*n), donde el parámetro n 
va a tomar los valores desde 1 a 20 y el marco es [-2*pi,2*pi]x[-1.1,1.1].

with_slider(
   n,
   makelist(i,i,1,20),
   sin(x*n),
   [x,-2*%pi,2*%pi],[y,-1.1,1.1])$

### Secantes y tangentes a una parábola

Ejercicio 3.3. Definir la función f tal que f(x) = x^2/4

f(x):= x^2/4;

Ejercicio 3.4. Dibujar la gráfica de f.

wxplot2d([f(x)], [x,-5,5])$

Ejercicio 3.5, Definir la función linea tal que linea(m,a) es la recta de 
pendiente m que pasa por el punto (a,f(a)).

linea(m,a):= m*(x-a)+f(a);

Ejercicio 3.6. Calcular linea(0.5,2)

linea(0.5,2);

Ejercicio 3.7. Dibujar las gráficas de f y linea(0.5,2) para x entre -4 y 4. 

wxplot2d([f(x),linea(0.5,2)], [x,-4,4])$

Ejercicio 3.8. Crear una animación de las funciones f(x) y linea(m,2), donde 
el parámetro m va a tomar los valores -1+0.2*i para i desde 0 a 20 y el marco 
es [0,4]x[-1,4].

with_slider(
   m,                                                                 /* parámetro */
   makelist(-1+0.2*i,i,0,20),                           /* valores del parámetro */
   [f(x),linea(m,2)],                                          /* funciones a representar */
   [x,0,4],[y,-1,4])$

Ejercicio 3.9. Repetir la animación anterior usando with_slider_draw.

with_slider_draw(
   m,                                                               
   makelist(-1+0.2*i,i,0,20),   
   color=blue,                        
   explicit(f(x),x,0,4),
   color=red,
   explicit(linea(m,2),x,0,4),                                          
   xrange=[0,4], yrange=[-1,4])$

Ejercicio 3.9. Crear una animación que dibuje las tangentes a la parábola f(x).

with_slider_draw(
   m,                                                               
   makelist(-2+0.2*i,i,0,20),   
   color=blue,                        
   explicit(f(x),x,-4,4),
   color=red,
   explicit(linea(m,2*m),x,-4,4),                                          
   xrange=[-4,4], yrange=[-1,4])$

### Polinomios de Taylor

Ejercicio 3.10. Definir la función f(x) = sen(x) + cos(x)

kill(f)$
f(x):= sin(x) + cos(x)$

Ejercicio 3.11. Definir las funciones polinomio_taylor[k], para k entre 1 y 20,
tales que polinomio_taylor[ el polinomio de los k primeros términos del
polinomio de Taylor de f(x) en x=0. Por ejemplo,
   (%i1) polinomio_taylor[7](x);
   (%o1) 1+x-x^2/2-x^3/6+x^4/24+x^5/120-x^6/720-x^7/5040+...

makelist(define(polinomio_taylor[k](x),trunc(taylor(f(x),x,0,k))),k,1,20)$

polinomio_taylor[7](x);

Ejercicio 3.13. Crear una animación de las funciones f(x) y 
polinomio_taylor[k](x), donde el parámetro k varía desde 1 a 20 en la ventana de
dimensiones [-10,10]x[-2,3].

with_slider_draw(
  k,
  makelist(n,n,1,20),
  line_width=2, color=blue, key="función",
  explicit(f(x),x,-10,10),
  color=red, key=sconcat("polinomio de taylor ",k),
  explicit(polinomio_taylor[k](x),x,-10,10),
  xaxis=true,yaxis=true,
  yrange=[-3,3])$