Update docs to match implementation of $build_and_dump_html_index
[maxima.git] / doc / info / es / draw.texi
blobcca27ec6b0e0097484322e23d5ebae6ef19b9a11
1 @c English version 2016-01-26
2 @menu
3 * Introducción a draw::
4 * Funciones y variables para draw::
5 * Funciones y variables para picture::
6 * Funciones y variables para worldmap::
7 @end menu
13 @node Introducción a draw, Funciones y variables para draw, draw, draw
14 @section Introducción a draw
17 @code{draw} es un interfaz para comunicar Maxima con Gnuplot.
19 Tres son las funciones principales a utilizar a nivel de Maxima: 
20 @code{draw2d}, @code{draw3d} y @code{draw}.
22 Síganse estos enlaces para ver ejemplos más elaborados
23 de este paquete:
25 @url{http://riotorto.users.sourceforge.net/Maxima/gnuplot/}
27
29 @url{http://riotorto.users.sourceforge.net/Maxima/vtk/}
31 Se necesita tener instalado Gnuplot 4.2 o superior para ejecutar este paquete.
37 @node Funciones y variables para draw, Funciones y variables para picture, Introducción a draw, draw
38 @section Funciones y variables para draw
42 @subsection Escenas
46 @deffn {Constructor de escena} gr2d (@var{Opción gráfica}, ..., @var{graphic_object}, ...)
48 La función @code{gr2d} construye un objeto que describe una escena 2d. Los
49 argumentos son @i{opciones gráficas} y @i{objetos gráficos}
50 o listas que contengan elementos de ambos tipos. Esta escena
51 se interpreta secuencialmente: las @i{opciones gráficas} afectan a aquellos
52 @i{objetos gráficos} colocados a su derecha. Algunas @i{opciones gráficas}
53 afectan al aspecto global de la escena.
55 La lista de @i{objetos gráficos} disponibles para escenas en dos
56 dimensiones: @code{bars}, @code{ellipse}, @code{explicit}, @code{image},
57 @code{implicit}, @code{label}, @code{parametric}, @code{points}, @code{polar},
58 @code{polygon}, @code{quadrilateral}, @code{rectangle}, @code{triangle},
59 @code{vector} y @code{geomap} (este último definido en el paquete @code{worldmap}).
61 Véanse también @code{draw} y @code{draw2d}.
63 Para utilizar este objecto, ejecútese primero @code{load("draw")}.
64 @end deffn
67 @deffn {Constructor de escena} gr3d (@var{Opción gráfica}, ..., @var{graphic_object}, ...)
69 La función @code{gr3d} construye un objeto que describe una escena 3d. Los
70 argumentos son @i{opciones gráficas} y @i{objetos gráficos}
71 o listas que contengan elementos de ambos tipos. Esta escena
72 se interpreta secuencialmente: las @i{opciones gráficas} afectan a aquellos
73 @i{objetos gráficos} colocados a su derecha. Algunas @i{opciones gráficas}
74 afectan al aspecto global de la escena.
76 La lista de @i{objetos gráficos} disponibles para escenas en tres
77 dimensiones: @code{cylindrical}, @code{elevation_grid}, @code{explicit}, 
78 @code{implicit}, @code{label}, @code{mesh}, @code{parametric}, 
79 @code{parametric_surface}, @code{points}, @code{quadrilateral}, 
80 @code{spherical}, @code{triangle}, @code{tube}, @code{vector}
81 y @code{geomap} (este último definido en el paquete @code{worldmap}).
83 Véanse también @code{draw} y @code{draw3d}.
85 Para utilizar este objeto, ejecútese primero @code{load("draw")}.
86 @end deffn
92 @subsection Funciones
97 @deffn {Función} draw (@var{gr2d}, ..., @var{gr3d}, ..., @var{options}, ...)
99 Representa gráficamente una serie de escenas; sus argumentos son objetos
100 @code{gr2d} y/o @code{gr3d}, junto con algunas opciones, o listas de escenas y opciones.
101 Por defecto, las escenas se representan en una columna.
103 La función @code{draw} acepta las siguientes opciones globales: @code{terminal},
104 @code{columns}, @code{dimensions}, @code{file_name} y @code{delay}.
106 Las funciones @code{draw2d} y @code{draw3d} son atajos a utilizar
107 cuando se quiere representar una única escena en dos o tres
108 dimensiones, respectivamente.
110 Véanse también @code{gr2d} y @code{gr3d}.
112 Para utilizar esta función, ejecútese primero @code{load("draw")}.
114 Ejemplo:
116 @example
117 (%i1) load("draw")$
118 (%i2) scene1: gr2d(title="Ellipse",
119                    nticks=30,
120                    parametric(2*cos(t),5*sin(t),t,0,2*%pi))$
121 (%i3) scene2: gr2d(title="Triangle",
122                    polygon([4,5,7],[6,4,2]))$
123 (%i4) draw(scene1, scene2, columns = 2)$
124 @end example
126 Las dos sentencias gráficas siguientes son equivalentes:
127 @example
128 (%i1) load("draw")$
129 (%i2) draw(gr3d(explicit(x^2+y^2,x,-1,1,y,-1,1)));
130 (%o2)                          [gr3d(explicit)]
131 (%i3) draw3d(explicit(x^2+y^2,x,-1,1,y,-1,1));
132 (%o3)                          [gr3d(explicit)]
133 @end example
135 Un fichero gif animado:
136 @example
137 (%i1) load("draw")$
138 (%i2) draw(
139         delay     = 100,
140         file_name = "zzz",
141         terminal  = 'animated_gif,
142         gr2d(explicit(x^2,x,-1,1)),
143         gr2d(explicit(x^3,x,-1,1)),
144         gr2d(explicit(x^4,x,-1,1)));
145 End of animation sequence
146 (%o2)          [gr2d(explicit), gr2d(explicit), gr2d(explicit)]
147 @end example
149 Véanse también @code{gr2d}, @code{gr3d}, @code{draw2d} y @code{draw3d}.
150 @end deffn
155 @deffn {Función} draw2d (@var{option}, @var{graphic_object}, ...)
157 Esta función es un atajo para
158 @code{draw(gr2d(@var{options}, ..., @var{graphic_object}, ...))}.
160 Puede utilizarse para representar una única escena en 2d.
162 Para utilizar esta función, ejecútese primero @code{load("draw")}.
164 Véanse también @code{draw} y @code{gr2d}.
165 @end deffn
168 @deffn {Función} draw3d (@var{option}, @var{graphic_object}, ...)
170 Esta función es un atajo para
171 @code{draw(gr3d(@var{options}, ..., @var{graphic_object}, ...))}.
173 Puede utilizarse para representar una única escena en 3d.
175 Para utilizar esta función, ejecútese primero @code{load("draw")}.
177 Véanse también @code{draw} y @code{gr3d}.
178 @end deffn
182 @deffn {Función} draw_file (@var{Opción gráfica}, ..., @var{Opción gráfica}, ...)
184 Almacena el gráfico actual en un fichero. Las opciones gráficas que
185 acepta son: @code{terminal}, @code{dimensions} y@code{file_name}. 
187 Ejemplo:
189 @example
190 (%i1) load("draw")$
191 (%i2) /* dibujo en pantalla */
192       draw(gr3d(explicit(x^2+y^2,x,-1,1,y,-1,1)))$
193 (%i3) /* same plot in eps format */
194       draw_file(terminal  = eps,
195                 dimensions = [5,5]) $
196 @end example
197 @end deffn
202 @deffn {Función} multiplot_mode (@var{term})
204 Esta función permite a Maxima trabajar en modo de gráficos múltiples en
205 una sola ventana del terminal @var{term}; argumentos válidos para esta función 
206 son @code{screen}, @code{wxt}, @code{aquaterm} y @code{none}.
208 Cuando el modo de gráficos múltiples está activo, cada llamada a @code{draw}
209 envía un nuevo gr'afico a la misma ventana, sin borrar los anteriores.
210 Para desactivar el modo de gráficos múltiples escríbase
211 @code{multiplot_mode(none)}.
213 Cuando el modo de gráficos múltiples está activo, la opción global @code{terminal} 
214 se bloquea; para desbloquearla y cambiar de terminal es necesario desactivar 
215 previamente el modo de gráficos múltiples.
217 Este modo de trabajo no funciona en plataformas Windows.
219 Ejemplo:
221 @example
222 (%i1) load("draw")$
223 (%i2) set_draw_defaults(
224          xrange = [-1,1],
225          yrange = [-1,1],
226          grid   = true,
227          title  = "Step by step plot" )$
228 (%i3) multiplot_mode(screen)$
229 (%i4) draw2d(color=blue,  explicit(x^2,x,-1,1))$
230 (%i5) draw2d(color=red,   explicit(x^3,x,-1,1))$
231 (%i6) draw2d(color=brown, explicit(x^4,x,-1,1))$
232 (%i7) multiplot_mode(none)$
233 @end example
234 @end deffn
239 @deffn {Función} set_draw_defaults (@var{Opción gráfica}, ..., @var{Opción gráfica}, ...)
241 Establece las opciones gráficas de usuario. Esta función es útil 
242 para dibujar varios gráficos con las mismas opciones. Llamando
243 a la función sin argumentos se borran las opciones de usuario por defecto.
245 Ejemplo:
247 @example
248 (%i1) load("draw")$
249 (%i2) set_draw_defaults(
250          xrange = [-10,10],
251          yrange = [-2, 2],
252          color  = blue,
253          grid   = true)$
254 (%i3) /* dibujo con opciones de usuario */
255       draw2d(explicit(((1+x)**2/(1+x*x))-1,x,-10,10))$
256 (%i4) set_draw_defaults()$
257 (%i5) /* dibujo con opciones por defecto */
258       draw2d(explicit(((1+x)**2/(1+x*x))-1,x,-10,10))$
259 @end example
261 Para utilizar esta función, ejecútese primero @code{load("draw")}.
262 @end deffn
268 @subsection Opciones gráficas
274 @defvr {Opción gráfica} adapt_depth
275 Valor por defecto: 10
277 @code{adapt_depth} es el número máximo de particiones utilizadas por
278 la rutina gráfica adaptativa.
280 Esta opción sólo es relevante para funciones de tipo @code{explicit} en 2d.
281 @end defvr
284 @defvr {Opción gráfica} allocation
285 Valor por defecto: @code{false}
287 Con la opción @code{allocation} es posible colocar a voluntad una escena en la
288 ventana de salida, lo cual resulta de utilidad en el caso de gráficos 
289 múltiples. Cuando la opción toma el valor @code{false}, la escena se coloca
290 de forma automática, dependiendo del valor asignado a la opción @code{columns}.
291 En cualquier otro caso, a @code{allocation} se le debe asignar una lista con dos
292 pares de números; el primero se corresponde con la posición de la esquina
293 inferior izquierda del gráfico y el segundo par hace referencia al ancho y alto
294 de la escena. Todas las cantidades deben darse en coordenadas relativas, entre
295 0 y 1.
297 Ejemplos:
299 Gráficos internos.
301 @example
302 (%i1) load("draw")$
303 (%i2) draw(
304         gr2d(
305           explicit(x^2,x,-1,1)),
306         gr2d(
307           allocation = [[1/4, 1/4],[1/2, 1/2]],
308           explicit(x^3,x,-1,1),
309           grid = true) ) $
310 @end example
312 Multiplot con dimensiones establecidas por el usuario.
314 @example
315 (%i1) load("draw")$
316 (%i2) draw(
317         terminal = wxt,
318         gr2d(
319           allocation = [[0, 0],[1, 1/4]],
320           explicit(x^2,x,-1,1)),
321         gr3d(
322           allocation = [[0, 1/4],[1, 3/4]],
323           explicit(x^2+y^2,x,-1,1,y,-1,1) ))$
324 @end example
326 Véase también la opción @code{columns}.
327 @end defvr
331 @defvr {Opción gráfica} axis_3d
332 Valor por defecto: @code{true}
334 Cuando @code{axis_3d} vale @code{true}, los ejes @var{x}, @var{y} y @var{z}
335 permanecen visibles en las escenas 3d.
337 Puesto que ésta es una opción global, su posición dentro de la
338 descripción de la escena no reviste importancia.
340 Ejemplo:
342 @example
343 (%i1) load("draw")$
344 (%i2) draw3d(axis_3d = false,
345              explicit(sin(x^2+y^2),x,-2,2,y,-2,2) )$
346 @end example
348 Véanse también @code{axis_bottom},  @code{axis_left}, @code{axis_top} y @code{axis_right} for axis in 2d.
349 @end defvr
354 @defvr {Opción gráfica} axis_bottom
355 Valor por defecto: @code{true}
357 Cuando @code{axis_bottom} vale @code{true}, el eje inferior permanece visible en las escenas 2d.
359 Puesto que ésta es una opción global, su posición dentro de la
360 descripción de la escena no reviste importancia.
362 Ejemplo:
364 @example
365 (%i1) load("draw")$
366 (%i2) draw2d(axis_bottom = false,
367              explicit(x^3,x,-1,1))$
368 @end example
370 Véanse también @code{axis_left},  @code{axis_top}, @code{axis_right} y @code{axis_3d}.
371 @end defvr
376 @defvr {Opción gráfica} axis_left
377 Valor por defecto: @code{true}
379 Cuando @code{axis_left} vale @code{true}, el eje izquierdo permanece visible en las escenas 2d.
381 Puesto que ésta es una opción global, su posición dentro de la
382 descripción de la escena no reviste importancia.
384 Ejemplo:
386 @example
387 (%i1) load("draw")$
388 (%i2) draw2d(axis_left = false,
389              explicit(x^3,x,-1,1))$
390 @end example
392 Véanse también @code{axis_bottom},  @code{axis_top}, @code{axis_right} y @code{axis_3d}.
393 @end defvr
398 @defvr {Opción gráfica} axis_right
399 Valor por defecto: @code{true}
401 Cuando @code{axis_right} vale @code{true}, el eje derecho permanece visible en las escenas 2d.
403 Puesto que ésta es una opción global, su posición dentro de la
404 descripción de la escena no reviste importancia.
406 Ejemplo:
408 @example
409 (%i1) load("draw")$
410 (%i2) draw2d(axis_right = false,
411              explicit(x^3,x,-1,1))$
412 @end example
414 Véanse también @code{axis_bottom},  @code{axis_left}, @code{axis_top} y @code{axis_3d}.
415 @end defvr
420 @defvr {Opción gráfica} axis_top
421 Valor por defecto: @code{true}
423 Cuando @code{axis_top} vale @code{true}, el eje superior permanece visible en las escenas 2d.
425 Puesto que ésta es una opción global, su posición dentro de la
426 descripción de la escena no reviste importancia.
428 Ejemplo:
430 @example
431 (%i1) load("draw")$
432 (%i2) draw2d(axis_top = false,
433              explicit(x^3,x,-1,1))$
434 @end example
436 Véanse también @code{axis_bottom},  @code{axis_left}, @code{axis_right} y @code{axis_3d}.
437 @end defvr
442 @defvr {Opción gráfica} background_color
443 Valor por defecto: @code{white}
445 Establece el color de fondo en los terminales @code{gif}, @code{png}, @code{jpg}
446 y @code{gif}. El color de fondo por defecto es blanco.
448 Puesto que ésta es una opción global, su posición dentro de la
449 descripción de la escena no reviste importancia.
451 Esta opción no es compatible con los terminales @code{epslatex} y @code{epslatex_standalone}.
453 Véase también @code{color}.
454 @end defvr
459 @defvr {Opción gráfica} border
460 Valor por defecto: @code{true}
462 Cuando @code{border} vale @code{true}, los bordes de los
463 polígonos se dibujan de acuerdo con @code{line_type} y
464 @code{line_width}.
466 Esta opción afecta a los siguientes objetos gráficos:
467 @itemize @bullet
468 @item
469 @code{gr2d}: @code{polygon}, @code{rectangle} y @code{ellipse}.
470 @end itemize
472 Ejemplo:
474 @example
475 (%i1) load("draw")$
476 (%i2) draw2d(color       = brown,
477              line_width  = 8,
478              polygon([[3,2],[7,2],[5,5]]),
479              border      = false,
480              fill_color  = blue,
481              polygon([[5,2],[9,2],[7,5]]) )$
482 @end example
483 @end defvr
488 @defvr {Opción gráfica} capping
489 Valor por defecto: @code{[false, false]}
491 Una lista de dos elementos, @code{true} y @code{false},
492 indicando si los extremos de un objeto gráfico @code{tube}
493 permanece abiertos o si deben ser cerrados. Por defecto, ambos
494 extremos se dejan abiertos.
496 La asignación @code{capping = false} equivale a @code{capping = [false, false]}
497 y @code{capping = true} equivale a @code{capping = [true, true]}.
499 Ejemplo:
501 @example
502 (%i1) load("draw")$
503 (%i2) draw3d(
504         capping = [false, true],
505         tube(0, 0, a, 1,
506              a, 0, 8) )$
507 @end example
509 @end defvr
513 @defvr {Opción gráfica} cbrange
514 Valor por defecto: @code{auto}
516 Cuando @code{cbrange} vale @code{auto}, el rango de los valores que se
517 colorean cuando @code{enhanced3d} es diferente de @code{false} se calcula
518 automáticamente. Valores fuera del rango utilizan el color del valor
519 extremo más cercano.
521 Cuando @code{enhanced3d} o @code{colorbox} vale @code{false}, la 
522 opción @code{cbrange} no tiene efecto alguno.
524 Si el usuario quiere especificar un intervalo para los valores a colorear,
525 éste debe expresarse como una lista de Maxima, como en @code{cbrange=[-2, 3]}.
527 Puesto que ésta es una opción global, su posición dentro de la
528 descripción de la escena no reviste importancia.
530 Ejemplo:
532 @example
533 (%i1) load("draw")$
534 (%i2) draw3d (
535         enhanced3d     = true,
536         color          = green,
537         cbrange = [-3,10],
538         explicit(x^2+y^2, x,-2,2,y,-2,2)) $
539 @end example
541 Véanse también @code{enhanced3d} y @code{cbtics}.
542 @end defvr
546 @defvr {Opción gráfica} cbtics
547 Valor por defecto: @code{auto}
549 Esta opción gráfica controla la forma en la que se dibujarán
550 las marcas en la escala de color cuando la opción @code{enhanced3d}
551 sea diferente de @code{false}.
553 Cuando @code{enhanced3d} o @code{colorbox} vale @code{false}, la 
554 opción @code{cbtics} no tiene efecto alguno.
556 Véase @code{xtics} para una descripción completa.
558 Ejemplo :
560 @example
561 (%i1) load("draw")$
562 (%i2) draw3d (
563         enhanced3d = true,
564         color      = green,
565         cbtics  = @{["High",10],["Medium",05],["Low",0]@},
566         cbrange = [0, 10],
567         explicit(x^2+y^2, x,-2,2,y,-2,2)) $
568 @end example
570 See also @code{enhanced3d}, @code{colorbox} and @code{cbrange}.
571 @end defvr
575 @defvr {Opción gráfica} color
576 Valor por defecto: @code{blue}
578 @code{color} especifica el color para dibujar líneas,
579 puntos, bordes de polígonos y etiquetas.
581 Los colores se pueden dar a partir de sus nombres o en
582 código hexadecimal @i{rgb}.
584 Los nombres de colores disponibles son: 
585 @code{white}, @code{black}, @code{gray0}, @code{grey0}, @code{gray10},
586 @code{grey10}, @code{gray20}, @code{grey20}, @code{gray30}, @code{grey30},
587 @code{gray40}, @code{grey40}, @code{gray50}, @code{grey50}, @code{gray60},
588 @code{grey60}, @code{gray70}, @code{grey70}, @code{gray80}, @code{grey80},
589 @code{gray90}, @code{grey90}, @code{gray100}, @code{grey100}, @code{gray},
590 @code{grey}, @code{light_gray}, @code{light_grey}, @code{dark_gray},
591 @code{dark_grey}, @code{red}, @code{light_red}, @code{dark_red}, @code{yellow},
592 @code{light_yellow}, @code{dark_yellow}, @code{green}, @code{light_green},
593 @code{dark_green}, @code{spring_green}, @code{forest_green}, @code{sea_green},
594 @code{blue}, @code{light_blue}, @code{dark_blue}, @code{midnight_blue}, 
595 @code{navy}, @code{medium_blue}, @code{royalblue}, @code{skyblue}, 
596 @code{cyan}, @code{light_cyan}, @code{dark_cyan}, @code{magenta}, 
597 @code{light_magenta}, @code{dark_magenta}, @code{turquoise}, 
598 @code{light_turquoise}, @code{dark_turquoise}, @code{pink}, @code{light_pink},
599 @code{dark_pink}, @code{coral}, @code{light_coral}, @code{orange_red},
600 @code{salmon}, @code{light_salmon}, @code{dark_salmon}, @code{aquamarine},
601 @code{khaki}, @code{dark_khaki}, @code{goldenrod}, @code{light_goldenrod},
602 @code{dark_goldenrod}, @code{gold}, @code{beige}, @code{brown}, @code{orange},
603 @code{dark_orange}, @code{violet}, @code{dark_violet}, @code{plum} y @code{purple}.
605 Las componentes cromáticas en código hexadecimal se introducen 
606 en el formato @code{"#rrggbb"}.
608 Ejemplo:
610 @example
611 (%i1) load("draw")$
612 (%i2) draw2d(explicit(x^2,x,-1,1), /* default is black */
613              color = red,
614              explicit(0.5 + x^2,x,-1,1),
615              color = blue,
616              explicit(1 + x^2,x,-1,1),
617              color = light_blue,
618              explicit(1.5 + x^2,x,-1,1),
619              color = "#23ab0f",
620              label(["This is a label",0,1.2])  )$
621 @end example
623 Véase también @code{fill_color}.
624 @end defvr
628 @defvr {Opción gráfica} colorbox
629 Valor por defecto: @code{true}
631 Cuando @code{colorbox} vale @code{true}, se dibuja una escala de colores sin
632 título al lado de los objetos @code{image} en 2D o de objetos
633 coloreados en 3D. Cuando @code{colorbox} vale @code{false}, no se presenta
634 la escala de colores. Cuando @code{colorbox} es una cadena de caracteres,
635 se mostrará la escala de colores con un título.
637 Puesto que ésta es una opción global, su posición dentro de la
638 descripción de la escena no reviste importancia.
640 Ejemplo:
642 Escala de colores e imágenes.
644 @example
645 (%i1) load("draw")$
646 (%i2) im: apply('matrix,
647                  makelist(makelist(random(200),i,1,30),i,1,30))$
648 (%i3) draw2d(image(im,0,0,30,30))$
649 (%i4) draw2d(colorbox = false, image(im,0,0,30,30))$
650 @end example
652 Escala de colores y objeto 3D coloreado.
654 @example
655 (%i1) load("draw")$
656 (%i2) draw3d(
657         colorbox   = "Magnitude",
658         enhanced3d = true,
659         explicit(x^2+y^2,x,-1,1,y,-1,1))$
660 @end example
662 Véase también @code{palette}.
663 @end defvr
668 @defvr {Opción gráfica} columns
669 Valor por defecto: 1
671 @code{columns} es el número de columnas en gráficos múltiples.
673 Puesto que ésta es una opción global, su posición dentro de la
674 descripción de la escena no reviste importancia. También puede
675 usarse como argumento de la función @code{draw}.
677 Ejemplo:
679 @example
680 (%i1) load("draw")$
681 (%i2) scene1: gr2d(title="Ellipse",
682                    nticks=30,
683                    parametric(2*cos(t),5*sin(t),t,0,2*%pi))$
684 (%i3) scene2: gr2d(title="Triangle",
685                    polygon([4,5,7],[6,4,2]))$
686 (%i4) draw(scene1, scene2, columns = 2)$
687 @end example
689 @end defvr
693 @defvr {Opción gráfica} contour
694 Valor por defecto: @code{none}
696 La opción @code{contour} permite al usuario decidir dónde colocar
697 las líneas de nivel.
698 Valores posibles son:
700 @itemize @bullet
702 @item
703 @code{none}:
704 no se dibujan líneas de nivel.
706 @item
707 @code{base}:
708 las líneas de nivel se proyectan sobre el plano xy.
710 @item
711 @code{surface}:
712 las líneas de nivel se dibujan sobre la propia superficie.
714 @item
715 @code{both}:
716 se dibujan dos conjuntos de líneas de nivel: sobre
717 la superficie y las que se proyectan sobre el plano xy.
719 @item
720 @code{map}:
721 las líneas de nivel se proyectan sobre el plano xy
722 y el punto de vista del observador se coloca perpendicularmente a él.
724 @end itemize
726 Puesto que ésta es una opción global, su posición dentro de la
727 descripción de la escena no reviste importancia.
729 Ejemplo:
731 @example
732 (%i1) load("draw")$
733 (%i2) draw3d(explicit(20*exp(-x^2-y^2)-10,x,0,2,y,-3,3),
734              contour_levels = 15,
735              contour        = both,
736              surface_hide   = true) $
737 @end example
739 Véase también @code{contour_levels}.
740 @end defvr
744 @defvr {Opción gráfica} contour_levels
745 Valor por defecto: 5
747 Esta opción gráfica controla cómo se dibujarán las líneas
748 de nivel. A @code{contour_levels} se le puede asignar un número entero
749 positivo, una lista de tres números o un conjunto numérico arbitrario:
751 @itemize @bullet
752 @item
753 Si a @code{contour_levels} se le asigna un entero positivo @var{n},
754 entonces se dibujarán @var{n} líneas de nivel a intervalos
755 iguales. Por defecto, se dibujaán cinco isolíneas.
757 @item
758 Si a @code{contour_levels} se le asigna una lista de tres números de la
759 forma @code{[inf,p,sup]}, las isolíneas se dibujarán
760 desde @code{inf} hasta @code{sup} en pasos de amplitud @code{p}.
762 @item
763 Si a @code{contour_levels} se le asigna un conjunto de números de la
764 forma @code{@{n1, n2, ...@}}, entonces se dibujarán las
765 isolíneas correspondientes a los niveles @code{n1},
766 @code{n2}, ...
767 @end itemize
769 Puesto que ésta es una opción global, su posición dentro de la
770 descripción de la escena no reviste importancia. 
772 Ejemplos:
774 Diez isolíneas igualmente espaciadas. El número
775 real puede ajustarse a fin de poder conseguir etiquetas más
776 sencillas.
777 @example
778 (%i1) load("draw")$
779 (%i2) draw3d(color = green,
780              explicit(20*exp(-x^2-y^2)-10,x,0,2,y,-3,3),
781              contour_levels = 10,
782              contour        = both,
783              surface_hide   = true) $
784 @end example
787 Desde -8 hasta 8 en pasos de amplitud 4.
788 @example
789 (%i1) load("draw")$
790 (%i2) draw3d(color = green,
791              explicit(20*exp(-x^2-y^2)-10,x,0,2,y,-3,3),
792              contour_levels = [-8,4,8],
793              contour        = both,
794              surface_hide   = true) $
795 @end example
797 Líneas correspondientes a los niveles -7, -6, 0.8 y 5.
798 @example
799 (%i1) load("draw")$
800 (%i2) draw3d(color = green,
801              explicit(20*exp(-x^2-y^2)-10,x,0,2,y,-3,3),
802              contour_levels = @{-7, -6, 0.8, 5@},
803              contour        = both,
804              surface_hide   = true) $
805 @end example
807 Véase también @code{contour}.
808 @end defvr
813 @defvr {Opción gráfica} data_file_name
814 Valor por defecto: @code{"data.gnuplot"}
816 @code{data_file_name} es el nombre del fichero que almacena
817 la información numérica que necesita Gnuplot para crear
818 el gráfico solicitado.
820 Puesto que ésta es una opción global, su posición dentro de la
821 descripción de la escena no reviste importancia. También puede
822 usarse como argumento de la función @code{draw}.
824 Véase ejemplo en @code{gnuplot_file_name}.
826 @end defvr
830 @defvr {Opción gráfica} delay
831 Valor por defecto: 5
833 Este es el retraso en centésimas de segundo entre imágenes
834 en los ficheros gif animados.
836 Puesto que ésta es una opción global, su posición dentro de la
837 descripción de la escena no reviste importancia. También puede
838 usarse como argumento de la función @code{draw}.
840 Ejemplo:
842 @example
843 (%i1) load("draw")$
844 (%i2) draw(
845         delay     = 100,
846         file_name = "zzz",
847         terminal  = 'animated_gif,
848         gr2d(explicit(x^2,x,-1,1)),
849         gr2d(explicit(x^3,x,-1,1)),
850         gr2d(explicit(x^4,x,-1,1)));
851 End of animation sequence
852 (%o2)          [gr2d(explicit), gr2d(explicit), gr2d(explicit)]
853 @end example
855 La opciób @code{delay} sólo se activa en caso de gifs animados; se ignora en
856 cualquier otro caso.
858 Véanse también @code{terminal}, @code{dimensions}.
859 @end defvr
863 @defvr {Opción gráfica} dimensions
864 Valor por defecto: @code{[600,500]}
866 Dimensiones del terminal de salida. Su valor es una lista formada
867 por el ancho y el alto. El significado de estos dos números
868 depende del terminal con el que se esté trabajando.
870 Con los terminales @code{gif}, @code{animated_gif}, @code{png}, @code{jpg},
871 @code{svg}, @code{screen}, @code{wxt} y @code{aquaterm}, los enteros
872 representan números de puntos en cada dirección. Si no son enteros
873 se redondean.
875 Con los terminales @code{eps}, @code{eps_color}, @code{pdf} y
876 @code{pdfcairo}, los números representan centésimas de cm,
877 lo que significa que, por defecto, las imágenes en estos
878 formatos tienen 6 cm de ancho por 5 cm de alto.
880 Puesto que ésta es una opción global, su posición dentro de la
881 descripción de la escena no reviste importancia. También puede
882 usarse como argumento de la función @code{draw}.
884 Ejemplos:
886 La opción @code{dimensions} aplicada a un fichero de salida y al
887 lienzo wxt.
889 @example
890 (%i1) load("draw")$
891 (%i2) draw2d(
892         dimensions = [300,300],
893         terminal   = 'png,
894         explicit(x^4,x,-1,1)) $
895 (%i3) draw2d(
896         dimensions = [300,300],
897         terminal   = 'wxt,
898         explicit(x^4,x,-1,1)) $
899 @end example
901 La opción @code{dimensions} aplicada a una salida eps.
902 En este caso queremos un fichero eps con dimensiones A4.
904 @example
905 (%i1) load("draw")$
906 (%i2) A4portrait: 100*[21, 29.7]$
907 (%i3) draw3d(
908         dimensions = A4portrait,
909         terminal   = 'eps,
910         explicit(x^2-y^2,x,-2,2,y,-2,2)) $
911 @end example
912 @end defvr
916 @defvr {Opción gráfica} draw_realpart
917 Valor por defecto: @code{true}
919 Cuando vale @code{true}, las funciones a dibujar se consideran funciones complejas cuyas
920 partes reales se deben dibujar; cuando la opción vale @code{false}, no se dibujará
921 nada en caso de que la función no devuelve valores reales.
923 Esta opción afecta a los objetos @code{explicit} y @code{parametric} en 2D y 3D, y al
924 objeto @code{parametric_surface}.
926 Ejemplo:
928 La opción @code{draw_realpart} afecta a los objetos @code{explicit} y @code{parametric}.
930 @example
931 (%i1) load("draw")$
932 (%i2) draw2d(
933         draw_realpart = false,
934         explicit(sqrt(x^2  - 4*x) - x, x, -1, 5),
935         color         = red,
936         draw_realpart = true,
937         parametric(x,sqrt(x^2  - 4*x) - x + 1, x, -1, 5) );
938 @end example
940 @end defvr
944 @defvr {Opción gráfica} enhanced3d
945 Valor por defecto: @code{none}
947 Cuando @code{enhanced3d} vale @code{none}, las superficies no se colorean en escenas 3D.
948 Para obtener una superficie coloreada se debe asignar una lista a la opción
949 @code{enhanced3d}, en la que el primer elemento es una expresión y el resto
950 son los nombres de las variables o parámetros utilizados en la expresión.
951 Una lista tal como @code{[f(x,y,z), x, y, z]} significa que al punto 
952 @code{[x,y,z]} de la superficie se le asigna el número @code{f(x,y,z)}, el
953 cual será coloreado de acuerdo con el valor actual de @code{palette}.
954 Para aquellos objetos gráficos 3D definidos en términos de parámetros,
955 es posible definir el número de color en términos de dichos parámetros,
956 como en @code{[f(u), u]}, para los objetos @code{parametric} y @code{tube},
957 o @code{[f(u,v), u, v]}, para el objeto @code{parametric_surface}.
958 Mientras que todos los objetos 3D admiten el modelo basado en coordenadas
959 absolutas, @code{[f(x,y,z), x, y, z]}, solamente dos de ellos, esto es
960 @code{explicit} y @code{elevation_grid}, aceptan también el modelo basado en las
961 coordenadas @code{[x,y]}, @code{[f(x,y), x, y]}. El objeto 3D @code{implicit}
962 acepta solamente el modelo @code{[f(x,y,z), x, y, z]}. El objeto @code{points} 
963 también acepta el modelo @code{[f(x,y,z), x, y, z]}, pero cuando los puntos
964 tienen naturaleza cronológica también admite el modelo @code{[f(k), k]},
965 siendo @code{k} un parámetro de orden.
967 Cuando a @code{enhanced3d} se le asigna algo diferente de @code{none}, se ignoran
968 las opciones @code{color} y @code{surface_hide}.
970 Los nombres de las variables definidas en las listas pueden ser diferentes
971 de aquellas utilizadas en las definiciones de los objetos gráficos.
973 A fin de mantener compatibilidad con versiones anteriores, @code{enhanced3d = false} 
974 es equivalente a @code{enhanced3d = none} y @code{enhanced3d = true} es
975 equivalente a @code{enhanced3d = [z, x, y, z]}. Si a @code{enhanced3d} se le
976 asigna una expresión, sus variables deben ser las mismas utilizadas en la
977 definición de la superficie. Esto no es necesario cuando se utilizan listas.
979 Sobre la definición de paletas, véase @code{palette}.
981 Ejemplos:
983 Objeto @code{explicit} con coloreado definido por el modelo @code{[f(x,y,z), x, y, z]}.
985 @example
986 (%i1) load("draw")$
987 (%i2) draw3d(
988          enhanced3d = [x-z/10,x,y,z],
989          palette    = gray,
990          explicit(20*exp(-x^2-y^2)-10,x,-3,3,y,-3,3))$
991 @end example
993 Objeto @code{explicit} con coloreado definido por el modelo @code{[f(x,y), x, y]}.
994 Los nombres de las variables definidas en las listas pueden ser diferentes
995 de aquellas utilizadas en las definiciones de los objetos gráficos 3D; en este
996 caso, @code{r} corresponde a @code{x} y @code{s} a @code{y}.
998 @example
999 (%i1) load("draw")$
1000 (%i2) draw3d(
1001          enhanced3d = [sin(r*s),r,s],
1002          explicit(20*exp(-x^2-y^2)-10,x,-3,3,y,-3,3))$
1003 @end example
1005 Objeto @code{parametric} con coloreado definido por el modelo @code{[f(x,y,z), x, y, z]}.
1007 @example
1008 (%i1) load("draw")$
1009 (%i2) draw3d(
1010          nticks = 100,
1011          line_width = 2,
1012          enhanced3d = [if y>= 0 then 1 else 0, x, y, z],
1013          parametric(sin(u)^2,cos(u),u,u,0,4*%pi)) $
1014 @end example
1016 Objeto @code{parametric} con coloreado definido por el modelo @code{[f(u), u]}.
1017 En este caso, @code{(u-1)^2} es una simplificación de @code{[(u-1)^2,u]}.
1019 @example
1020 (%i1) load("draw")$
1021 (%i2) draw3d(
1022          nticks = 60,
1023          line_width = 3,
1024          enhanced3d = (u-1)^2,
1025          parametric(cos(5*u)^2,sin(7*u),u-2,u,0,2))$
1026 @end example
1028 Objeto @code{elevation_grid} con coloreado definido por el modelo @code{[f(x,y), x, y]}.
1030 @example
1031 (%i1) load("draw")$
1032 (%i2) m: apply(
1033            matrix,
1034            makelist(makelist(cos(i^2/80-k/30),k,1,30),i,1,20)) $
1035 (%i3) draw3d(
1036          enhanced3d = [cos(x*y*10),x,y],
1037          elevation_grid(m,-1,-1,2,2),
1038          xlabel = "x",
1039          ylabel = "y");
1040 @end example
1042 Objeto @code{tube} con coloreado definido por el modelo @code{[f(x,y,z), x, y, z]}.
1044 @example
1045 (%i1) load("draw")$
1046 (%i2) draw3d(
1047          enhanced3d = [cos(x-y),x,y,z],
1048          palette = gray,
1049          xu_grid = 50,
1050          tube(cos(a), a, 0, 1, a, 0, 4*%pi) )$
1051 @end example
1053 Objeto @code{tube} con coloreado definido por el modelo @code{[f(u), u]}.
1054 En este caso, @code{enhanced3d = -a} puede ser una simplificación de 
1055 @code{enhanced3d = [-foo,foo]}.
1057 @example
1058 (%i1) load("draw")$
1059 (%i2) draw3d(
1060          capping = [true, false],
1061          palette = [26,15,-2],
1062          enhanced3d = [-foo, foo],
1063          tube(a, a, a^2, 1, a, -2, 2) )$
1064 @end example
1066 Objetos @code{implicit} y @code{points} con coloreado definido por el
1067 modelo @code{[f(x,y,z), x, y, z]}.
1069 @example
1070 (%i1) load("draw")$
1071 (%i2) draw3d(
1072          enhanced3d = [x-y,x,y,z],
1073          implicit((x^2+y^2+z^2-1)*(x^2+(y-1.5)^2+z^2-0.5)=0.015,
1074                   x,-1,1,y,-1.2,2.3,z,-1,1)) $
1075 (%i3) m: makelist([random(1.0),random(1.0),random(1.0)],k,1,2000)$
1076 (%i4) draw3d(
1077          point_type = filled_circle,
1078          point_size = 2,
1079          enhanced3d = [u+v-w,u,v,w],
1080          points(m) ) $
1081 @end example
1083 cuando los puntos tienen naturaleza cronológica también se admite
1084 el modelo @code{[f(k), k]}, siendo @code{k} un parámetro de orden.
1086 @example
1087 (%i1) load("draw")$
1088 (%i2) m:makelist([random(1.0), random(1.0), random(1.0)],k,1,5)$
1089 (%i3) draw3d(
1090          enhanced3d = [sin(j), j],
1091          point_size = 3,
1092          point_type = filled_circle,
1093          points_joined = true,
1094          points(m)) $
1095 @end example
1096 @end defvr
1100 @defvr {Opción gráfica} error_type
1101 Valor por defecto: @code{y}
1103 Dependiendo de su valor, el cual puede ser @code{x}, @code{y} o @code{xy},
1104 el objeto gráfico @code{errors} dibujará puntos con barras de error horizontales,
1105 verticales, o ambas. Si @code{error_type=boxes}, se dibujarán cajas en lugar de cruces.
1107 Véase también @code{errors}.
1108 @end defvr
1112 @defvr {Opción gráfica} file_name
1113 Valor por defecto: @code{"maxima_out"}
1115 @code{file_name} es el nombre del fichero en el que los terminales @code{png},
1116 @code{jpg}, @code{gif}, @code{eps}, @code{eps_color}, @code{pdf}, @code{pdfcairo}
1117 y @code{svg} guardarán el gráfico.
1119 Puesto que ésta es una opción global, su posición dentro de la
1120 descripción de la escena no reviste importancia. También puede
1121 usarse como argumento de la función @code{draw}.
1123 Ejemplo:
1125 @example
1126 (%i1) load("draw")$
1127 (%i2) draw2d(file_name = "myfile",
1128              explicit(x^2,x,-1,1),
1129              terminal  = 'png)$
1130 @end example
1132 Véanse también @code{terminal}, @code{dimensions}.
1133 @end defvr
1137 @defvr {Opción gráfica} fill_color
1138 Valor por defecto: @code{"red"}
1140 @code{fill_color} especifica el color para rellenar polígonos
1141 y funciones explícitas bidimensionales.
1143 Véase @code{color} para más información sobre cómo definir 
1144 colores.
1145 @end defvr
1150 @defvr {Opción gráfica} fill_density
1151 Valor por defecto: 0
1153 @code{fill_density} es un número entre 0 y 1 que especifica
1154 la intensidad del color de relleno (dado por @code{fill_color})
1155 en los objetos @code{bars}.
1157 Véase @code{bars} para ejemplos.
1158 @end defvr
1163 @defvr {Opción gráfica} filled_func
1164 Valor por defecto: @code{false}
1166 La opción @code{filled_func} establece cómo se van a rellenar las regiones
1167 limitadas por funciones. Si @code{filled_func} vale @code{true}, la
1168 región limitada por la función definida en el objeto @code{explicit}
1169 y el borde inferior del la ventana gráfica se rellena con @code{fill_color}.
1170 Si @code{filled_func} guarda la expresión de una función, entonces la
1171 región limitada por esta función y la definida en el objeto @code{explicit}
1172 será la que se rellene. Por defecto, las funciones explícitas
1173 no se rellenan.
1175 Un caso de especial utilidad es @code{filled_func=0}, con lo que se sombrea la
1176 región limitada por el eje horizontal y la función explícita.
1178 Esta opción sólo afecta al objeto gráfico bidimensional @code{explicit}.
1180 Ejemplo:
1182 Región limitada por un objeto @code{explicit} y el borde inferior
1183 de la ventana gráfica.
1184 @example
1185 (%i1) load("draw")$
1186 (%i2) draw2d(fill_color  = red,
1187              filled_func = true,
1188              explicit(sin(x),x,0,10) )$
1189 @end example
1191 Región limitada por un objeto @code{explicit} y la función
1192 definida en la opción @code{filled_func}. Nótese que la 
1193 variable en @code{filled_func} debe ser la misma que la utilizada en 
1194 @code{explicit}.
1195 @example
1196 (%i1) load("draw")$
1197 (%i2) draw2d(fill_color  = grey,
1198              filled_func = sin(x),
1199              explicit(-sin(x),x,0,%pi));
1200 @end example
1202 Véanse también @code{fill_color} y @code{explicit}.
1203 @end defvr
1207 @defvr {Opción gráfica} font
1208 Valor por defecto: @code{""} (cadena vacía)
1210 Esta opción permite seleccionar el tipo de fuente a utilizar por el
1211 terminal. Sólo se puede utilizar un tipo de fuente y tamaño por
1212 gráfico.
1214 Puesto que ésta es una opción global, su posición dentro de la
1215 descripción de la escena no reviste importancia.
1217 Véase también @code{font_size}.
1219 Gnuplot no puede gestionar por sí mismo las fuentes,
1220 dejando esta tarea a las librerías que dan soporte a los
1221 diferentes terminales, cada uno con su propia manera de controlar
1222 la tipografía. A continuación un breve resumen:
1224 @itemize @bullet
1225 @item
1226 @i{x11}:
1227 Utiliza el mecanismo habitual para suministrar las fuentes en x11.
1229 Ejemplo:
1230 @example
1231 (%i1) load("draw")$
1232 (%i2) draw2d(font      = "Arial", 
1233              font_size = 20,
1234              label(["Arial font, size 20",1,1]))$
1235 @end example
1237 @item
1238 @i{windows}:
1239 El terminal de windows no permite cambiar fuentes desde dentro
1240 del gráfico. Una vez se ha creado el gráfico, se pueden cambiar las
1241 fuentes haciendo clic derecho en el menú de la ventana gráfica.
1243 @item
1244 @i{png, jpeg, gif}:
1245 La librería @i{libgd} utiliza la ruta a las fuentes
1246 almacenada en la variable de entorno @env{GDFONTPATH}; en tal caso
1247 sólo es necesario darle a la opción @code{font} el nombre de la
1248 fuente. También es posible darle la ruta completa al fichero de la fuente.
1250 Ejemplos:
1252 A la opción @code{font} se le puede dar la ruta completa al fichero de la fuente:
1253 @example
1254 (%i1) load("draw")$
1255 (%i2) path: "/usr/share/fonts/truetype/freefont/" $
1256 (%i3) file: "FreeSerifBoldItalic.ttf" $
1257 (%i4) draw2d(
1258         font      = concat(path, file), 
1259         font_size = 20,
1260         color     = red,
1261         label(["FreeSerifBoldItalic font, size 20",1,1]),
1262         terminal  = png)$
1263 @end example
1265 Si la variable de entorno @env{GDFONTPATH} almacena la ruta
1266 a la carpeta donde se alojan las fuentes, es posible darle a la
1267 opción @code{font} sólo el nombre de la fuente:
1268 @example
1269 (%i1) load("draw")$
1270 (%i2) draw2d(
1271         font      = "FreeSerifBoldItalic", 
1272         font_size = 20,
1273         color     = red,
1274         label(["FreeSerifBoldItalic font, size 20",1,1]),
1275         terminal  = png)$
1276 @end example
1278 @item
1279 @i{Postscript}:
1280 Las fuentes estándar de Postscript son: @code{"Times-Roman"}, @code{"Times-Italic"}, @code{"Times-Bold"}, @code{"Times-BoldItalic"}, @code{"Helvetica"}, @code{"Helvetica-Oblique"}, @code{"Helvetica-Bold"}, @code{"Helvetic-BoldOblique"}, @code{"Courier"}, @code{"Courier-Oblique"}, @code{"Courier-Bold"} y @code{"Courier-BoldOblique"}.
1281   
1282 Ejemplo:
1283 @example
1284 (%i1) load("draw")$
1285 (%i2) draw2d(
1286         font      = "Courier-Oblique", 
1287         font_size = 15,
1288         label(["Courier-Oblique font, size 15",1,1]),
1289         terminal = eps)$
1290 @end example
1292 @item
1293 @i{pdf}:
1294 Utiliza las mismas fuentes que @i{Postscript}.
1296 @item
1297 @i{pdfcairo}:
1298 Utiliza las mismas fuentes que @i{wxt}.
1300 @item
1301 @i{wxt}:
1302 La librería @i{pango} encuentra las fuentes por medio de la utilidad @code{fontconfig}.
1304 @item
1305 @i{aqua}:
1306 La fuente por defecto es @code{"Times-Roman"}.
1307 @end itemize
1309 La documentación de gnuplot es una importante fuente de información sobre terminales y fuentes.
1310 @end defvr
1314 @defvr {Opción gráfica} font_size
1315 Valor por defecto: 10
1317 Esta opción permite seleccionar el tamaño de la fuente a utilizar por el
1318 terminal. Sólo se puede utilizar un tipo de fuente y tamaño por
1319 gráfico. @code{font_size} sólo se activa cuando la opción @code{font}
1320 tiene un valor diferente de la cadena vacía.
1322 Puesto que ésta es una opción global, su posición dentro de la
1323 descripción de la escena no reviste importancia.
1325 Véase también @code{font}.
1326 @end defvr
1330 @defvr {Opción gráfica} gnuplot_file_name
1331 Valor por defecto: @code{"maxout.gnuplot"}
1333 @code{gnuplot_file_name} es el nombre del fichero que 
1334 almacena las instrucciones a ser procesadas por Gnuplot.
1336 Puesto que ésta es una opción global, su posición dentro de la
1337 descripción de la escena no reviste importancia. También puede
1338 usarse como argumento de la función @code{draw}.
1340 Ejemplo:
1342 @example
1343 (%i1) load("draw")$
1344 (%i2) draw2d(
1345        file_name = "my_file",
1346        gnuplot_file_name = "my_commands_for_gnuplot",
1347        data_file_name    = "my_data_for_gnuplot",
1348        terminal          = png,
1349        explicit(x^2,x,-1,1)) $
1350 @end example
1352 Véase también @code{data_file_name}.
1354 @end defvr
1358 @defvr {Opción gráfica} grid
1359 Valor por defecto: @code{false}
1361 Cuando 
1363 Cuando @code{grid} toma un valor distinto de @code{false}, se dibujará una rejilla
1364 sobre el plano @var{xy}. Si a @code{grid} se le asigna el valor @code{true}, se dibujará
1365 una línea de la rejilla por cada marca que haya sobre los ejes. Si a @code{grid} se le
1366 asigna la lista @code{[nx,ny]}, con @var{[nx,ny] > [0,0]}, se dibujarán @code{nx} 
1367 líneas por cada marca del eje-@var{x} y @var{ny} líneas por cada marca del eje-@var{y}.
1369 Puesto que ésta es una opción global, su posición dentro de la
1370 descripción de la escena no reviste importancia.
1372 Ejemplo:
1374 @example
1375 (%i1) load("draw")$
1376 (%i2) draw2d(grid = true,
1377              explicit(exp(u),u,-2,2))$
1378 @end example
1379 @end defvr
1384 @defvr {Opción gráfica} head_angle
1385 Valor por defecto: 45
1387 @code{head_angle} indica el ángulo, en grados, entre la flecha y el
1388 segmento del vector.
1390 Esta opción sólo es relevante para objetos de tipo @code{vector}.
1392 Ejemplo:
1394 @example
1395 (%i1) load("draw")$
1396 (%i2) draw2d(xrange      = [0,10],
1397              yrange      = [0,9],
1398              head_length = 0.7,
1399              head_angle  = 10,
1400              vector([1,1],[0,6]),
1401              head_angle  = 20,
1402              vector([2,1],[0,6]),
1403              head_angle  = 30,
1404              vector([3,1],[0,6]),
1405              head_angle  = 40,
1406              vector([4,1],[0,6]),
1407              head_angle  = 60,
1408              vector([5,1],[0,6]),
1409              head_angle  = 90,
1410              vector([6,1],[0,6]),
1411              head_angle  = 120,
1412              vector([7,1],[0,6]),
1413              head_angle  = 160,
1414              vector([8,1],[0,6]),
1415              head_angle  = 180,
1416              vector([9,1],[0,6]) )$
1417 @end example
1419 Véanse también @code{head_both}, @code{head_length} y @code{head_type}. 
1420 @end defvr
1425 @defvr {Opción gráfica} head_both
1426 Valor por defecto: @code{false}
1428 Cuando @code{head_both} vale @code{true}, los vectores se dibujan bidireccionales.
1429 Si vale @code{false}, se dibujan unidireccionales.
1431 Esta opción sólo es relevante para objetos de tipo @code{vector}.
1433 Ejemplo:
1435 @example
1436 (%i1) load("draw")$
1437 (%i2) draw2d(xrange      = [0,8],
1438              yrange      = [0,8],
1439              head_length = 0.7,
1440              vector([1,1],[6,0]),
1441              head_both   = true,
1442              vector([1,7],[6,0]) )$
1443 @end example
1445 Véanse también @code{head_length}, @code{head_angle} y @code{head_type}. 
1446 @end defvr
1451 @defvr {Opción gráfica} head_length
1452 Valor por defecto: 2
1454 @code{head_length} indica, en las unidades del eje @var{x}, la
1455 longitud de las flechas de los vectores.
1457 Esta opción sólo es relevante para objetos de tipo @code{vector}.
1459 Ejemplo:
1461 @example
1462 (%i1) load("draw")$
1463 (%i2) draw2d(xrange      = [0,12],
1464              yrange      = [0,8],
1465              vector([0,1],[5,5]),
1466              head_length = 1,
1467              vector([2,1],[5,5]),
1468              head_length = 0.5,
1469              vector([4,1],[5,5]),
1470              head_length = 0.25,
1471              vector([6,1],[5,5]))$
1472 @end example
1474 Véanse también @code{head_both}, @code{head_angle} y @code{head_type}. 
1475 @end defvr
1480 @defvr {Opción gráfica} head_type
1481 Valor por defecto: @code{filled}
1483 @code{head_type} se utiliza para especificar cómo se habrán de
1484 dibujar las flechas de los vectores. Los valores posibles para
1485 esta opción son: @code{filled} (flechas cerradas y rellenas),
1486 @code{empty} (flechas cerradas pero no rellenas) y @code{nofilled}
1487 (flechas abiertas).
1489 Esta opción sólo es relevante para objetos de tipo @code{vector}.
1491 Ejemplo:
1493 @example
1494 (%i1) load("draw")$
1495 (%i2) draw2d(xrange      = [0,12],
1496              yrange      = [0,10],
1497              head_length = 1,
1498              vector([0,1],[5,5]), /* default type */
1499              head_type = 'empty,
1500              vector([3,1],[5,5]),
1501              head_type = 'nofilled,
1502              vector([6,1],[5,5]))$
1503 @end example
1505 Véanse también @code{head_both}, @code{head_angle} y @code{head_length}. 
1506 @end defvr
1510 @defvr {Opción gráfica} interpolate_color
1511 Valor por defecto: @code{false}
1513 Esta opción solo es relevante si @code{enhanced3d} tiene un valor 
1514 diferente de @code{false}.
1516 Si @code{interpolate_color} vale @code{false}, las superficies se colorean con
1517 cuadriláteros homogéneos. Si vale @code{true}, las transiciones de colores se
1518 suavizan por interpolación.
1520 La opción @code{interpolate_color} también acepta una lista de dos números, @code{[m,n]}.
1521 Para @var{m} y @var{n} positivos, cada cuadrilátero o triángulo se interpola
1522 @var{m} y @var{n} veces en la dirección respectiva. Para @var{m} y @var{n} negativos,
1523 la frecuencia de interpolación se elige de forma que se dibujen al menos @var{abs(m)} y
1524 @var{abs(n)} puntos, pudiéndose considerar esto como una función especial de enrejado.
1525 Con valores nulos, esto es @code{interpolate_color=[0,0]}, se seleccionará un número 
1526 óptimo de puntos interpolados en la superficie.
1528 Además, @code{interpolate_color=true} es equivalente a @code{interpolate_color=[0,0]}.
1530 La interpolación de colores en superficies paramétricas puede dar resultados
1531 imprevisibles.
1533 Ejemplos:
1535 Interpolación de color con funciones explícitas.
1537 @example
1538 (%i1) load("draw")$
1539 (%i2) draw3d(
1540         enhanced3d   = sin(x*y),
1541         explicit(20*exp(-x^2-y^2)-10, x ,-3, 3, y, -3, 3)) $
1542 (%i3) draw3d(
1543         interpolate_color = true,
1544         enhanced3d   = sin(x*y),
1545         explicit(20*exp(-x^2-y^2)-10, x ,-3, 3, y, -3, 3)) $
1546 (%i4) draw3d(
1547         interpolate_color = [-10,0],
1548         enhanced3d   = sin(x*y),
1549         explicit(20*exp(-x^2-y^2)-10, x ,-3, 3, y, -3, 3)) $
1550 @end example
1552 Interpolación de color con el objeto @code{mesh}.
1554 @example
1555 (%i1) load("draw")$
1556 (%i2) draw3d( 
1557         enhanced3d = true,
1558         mesh([[1,1,3],   [7,3,1],[12,-2,4],[15,0,5]],
1559              [[2,7,8],   [4,3,1],[10,5,8], [12,7,1]],
1560              [[-2,11,10],[6,9,5],[6,15,1], [20,15,2]])) $
1561 (%i3) draw3d( 
1562         enhanced3d        = true,
1563         interpolate_color = true,
1564         mesh([[1,1,3],   [7,3,1],[12,-2,4],[15,0,5]],
1565              [[2,7,8],   [4,3,1],[10,5,8], [12,7,1]],
1566              [[-2,11,10],[6,9,5],[6,15,1], [20,15,2]])) $
1567 (%i4) draw3d( 
1568         enhanced3d        = true,
1569         interpolate_color = true,
1570         view=map,
1571         mesh([[1,1,3],   [7,3,1],[12,-2,4],[15,0,5]],
1572              [[2,7,8],   [4,3,1],[10,5,8], [12,7,1]],
1573              [[-2,11,10],[6,9,5],[6,15,1], [20,15,2]])) $
1574 @end example
1576 Véase también @code{enhanced3d}. 
1578 @end defvr
1582 @defvr {Opción gráfica} ip_grid
1583 Valor por defecto: @code{[50, 50]}
1585 @code{ip_grid} establece la rejilla del primer muestreo para los
1586 gráficos de funciones implícitas.
1588 Esta opción sólo es relevante para funciones de tipo @code{implicit}.
1589 @end defvr
1593 @defvr {Opción gráfica} ip_grid_in
1594 Valor por defecto: @code{[5, 5]}
1596 @code{ip_grid_in} establece la rejilla del segundo muestreo para los
1597 gráficos de funciones implícitas.
1599 Esta opción sólo es relevante para funciones de tipo @code{implicit}.
1600 @end defvr
1605 @defvr {Opción gráfica} key
1606 Valor por defecto: @code{""} (cadena vacía)
1608 @code{key} es la clave de una función en la leyenda. Si @code{key}
1609 es una cadena vacía, las funciones no tendrán clave
1610 asociada en la leyenda.
1612 Esta opción afecta a los siguientes objetos gráficos:
1613 @itemize @bullet
1614 @item
1615 @code{gr2d}: @code{points}, @code{polygon}, @code{rectangle},
1616 @code{ellipse}, @code{vector}, @code{explicit}, @code{implicit},
1617 @code{parametric} y @code{polar}.
1619 @item
1620 @code{gr3d}: @code{points}, @code{explicit}, @code{parametric},
1621 y @code{parametric_surface}.
1622 @end itemize
1624 Ejemplo:
1626 @example
1627 (%i1) load("draw")$
1628 (%i2) draw2d(key   = "Sinus",
1629              explicit(sin(x),x,0,10),
1630              key   = "Cosinus",
1631              color = red,
1632              explicit(cos(x),x,0,10) )$
1633 @end example
1634 @end defvr
1638 @defvr {Opción gráfica} key_pos
1639 Valor por defecto: @code{""} (cadena vacía)
1641 La opción @code{key_pos} establece en qué posición se colocará la leyenda.
1642 Si @code{key} es una cadena vacía, entonces se utilizará por defecto la
1643 posición @code{"top_right"}.
1644 Los valores disponibles para esta opción son: @code{top_left}, @code{top_center},
1645 @code{top_right}, @code{center_left}, @code{center}, @code{center_right},
1646 @code{bottom_left}, @code{bottom_center} y @code{bottom_right}.
1648 Puesto que ésta es una opción global, su posición dentro de la
1649 descripción de la escena no reviste importancia.
1651 Ejemplos:
1653 @example
1654 (%i1) load("draw")$
1655 (%i2) draw2d(
1656         key_pos = top_left,
1657         key     = "x",
1658         explicit(x,  x,0,10),
1659         color   = red,
1660         key     = "x squared",
1661         explicit(x^2,x,0,10))$
1662 (%i3) draw3d(
1663         key_pos = center,
1664         key     = "x",
1665         explicit(x+y,x,0,10,y,0,10),
1666         color= red,
1667         key     = "x squared",
1668         explicit(x^2+y^2,x,0,10,y,0,10))$
1669 @end example
1671 @end defvr
1675 @defvr {Opción gráfica} label_alignment
1676 Valor por defecto: @code{center}
1678 @code{label_alignment} se utiliza para especificar dónde se escribirán
1679 las etiquetas con respecto a las coordenadas de referencia. Los valores posibles para
1680 esta opción son: @code{center}, @code{left} y @code{right}.
1682 Esta opción sólo es relevante para objetos de tipo @code{label}.
1684 Ejemplo:
1686 @example
1687 (%i1) load("draw")$
1688 (%i2) draw2d(xrange          = [0,10],
1689              yrange          = [0,10],
1690              points_joined   = true,
1691              points([[5,0],[5,10]]),
1692              color           = blue,
1693              label(["Centered alignment (default)",5,2]),
1694              label_alignment = 'left,
1695              label(["Left alignment",5,5]),
1696              label_alignment = 'right,
1697              label(["Right alignment",5,8]))$
1698 @end example
1700 Véanse también @code{label_orientation} y @code{color}. 
1701 @end defvr
1706 @defvr {Opción gráfica} label_orientation
1707 Valor por defecto: @code{horizontal}
1709 @code{label_orientation} se utiliza para especificar la orientación
1710 de las etiquetas. Los valores posibles para esta opción son:
1711 @code{horizontal} y @code{vertical}.
1713 Esta opción sólo es relevante para objetos de tipo @code{label}.
1715 Ejemplo:
1717 En este ejemplo, el punto ficticio que se añade sirve para obtener
1718 la imagen, ya que el paquete @code{draw} necesita siempre de datos para
1719 construir la escena.
1720 @example
1721 (%i1) load("draw")$
1722 (%i2) draw2d(xrange     = [0,10],
1723              yrange     = [0,10],
1724              point_size = 0,
1725              points([[5,5]]),
1726              color      = navy,
1727              label(["Horizontal orientation (default)",5,2]),
1728              label_orientation = 'vertical,
1729              color             = "#654321",
1730              label(["Vertical orientation",1,5]))$
1731 @end example
1733 Véanse también @code{label_alignment} y @code{color}. 
1734 @end defvr
1739 @defvr {Opción gráfica} line_type
1740 Valor por defecto: @code{solid}
1742 @code{line_type} indica cómo se van a dibujar las líneas;
1743 valores posibles son @code{solid} y @code{dots}, que están disponibles
1744 en todos los terminales, y @code{dashes}, @code{short_dashes}, 
1745 @code{short_long_dashes}, @code{short_short_long_dashes} y @code{dot_dash},
1746 que no esán disponibles en los terminales @code{png}, @code{jpg} y @code{gif}.
1748 Esta opción afecta a los siguientes objetos gráficos:
1749 @itemize @bullet
1750 @item
1751 @code{gr2d}: @code{points}, @code{polygon}, @code{rectangle}, 
1752 @code{ellipse}, @code{vector}, @code{explicit}, @code{implicit}, 
1753 @code{parametric} y @code{polar}.
1755 @item
1756 @code{gr3d}: @code{points}, @code{explicit}, @code{parametric} y @code{parametric_surface}.
1757 @end itemize
1759 Ejemplo:
1761 @example
1762 (%i1) load("draw")$
1763 (%i2) draw2d(line_type = dots,
1764              explicit(1 + x^2,x,-1,1),
1765              line_type = solid, /* default */
1766              explicit(2 + x^2,x,-1,1))$
1767 @end example
1769 Véase también @code{line_width}.
1770 @end defvr
1775 @defvr {Opción gráfica} line_width
1776 Valor por defecto: 1
1778 @code{line_width} es el ancho de las líneas a dibujar.
1779 Su valor debe ser un número positivo.
1781 Esta opción afecta a los siguientes objetos gráficos:
1782 @itemize @bullet
1783 @item
1784 @code{gr2d}: @code{points}, @code{polygon}, @code{rectangle}, 
1785 @code{ellipse}, @code{vector}, @code{explicit}, @code{implicit}, 
1786 @code{parametric} y @code{polar}.
1788 @item
1789 @code{gr3d}: @code{points} y @code{parametric}.
1790 @end itemize
1792 Ejemplo:
1794 @example
1795 (%i1) load("draw")$
1796 (%i2) draw2d(explicit(x^2,x,-1,1), /* default width */
1797              line_width = 5.5,
1798              explicit(1 + x^2,x,-1,1),
1799              line_width = 10,
1800              explicit(2 + x^2,x,-1,1))$
1801 @end example
1803 Véase también @code{line_type}.
1804 @end defvr
1809 @defvr {Opción gráfica} logcb
1810 Valor por defecto: @code{false}
1812 Cuando @code{logcb} vale @code{true}, la escala de colores se dibuja 
1813 logarítmicamente.
1815 Cuando @code{enhanced3d} o @code{colorbox} vale @code{false}, la 
1816 opción @code{logcb} no tiene efecto alguno.
1818 Puesto que ésta es una opción global, su posición dentro de la
1819 descripción de la escena no reviste importancia.
1821 Ejemplo:
1823 @example
1824 (%i1) load("draw")$
1825 (%i2) draw3d (
1826         enhanced3d = true,
1827         color      = green,
1828         logcb = true,
1829         logz  = true,
1830         palette = [-15,24,-9],
1831         explicit(exp(x^2-y^2), x,-2,2,y,-2,2)) $
1832 @end example
1834 Véanse también @code{enhanced3d}, @code{colorbox} y @code{cbrange}.
1835 @end defvr
1840 @defvr {Opción gráfica} logx
1841 Valor por defecto: @code{false}
1843 Cuando @code{logx} vale @code{true}, el eje @var{x} se dibuja
1844 en la escala logarítmica.
1846 Puesto que ésta es una opción global, su posición dentro de la
1847 descripción de la escena no reviste importancia.
1849 Ejemplo:
1851 @example
1852 (%i1) load("draw")$
1853 (%i2) draw2d(explicit(log(x),x,0.01,5),
1854              logx = true)$
1855 @end example
1857 Véanse también @code{logy}, @code{logx_secondary}, @code{logy_secondary} y @code{logz}.
1859 @end defvr
1863 @defvr {Opción gráfica} logx_secondary
1864 Valor por defecto: @code{false}
1866 Si @code{logx_secondary} vale @code{true}, el eje secundario de @var{x} 
1867 se dibuja en la escala logarítmica.
1869 Puesto que ésta es una opción global, su posición dentro de la
1870 descripción de la escena no reviste importancia.
1872 Ejemplo:
1874 @example
1875 (%i1) load("draw")$
1876 (%i2) draw2d(
1877         grid = true,
1878         key="x^2, linear scale",
1879         color=red,
1880         explicit(x^2,x,1,100),
1881         xaxis_secondary = true,
1882         xtics_secondary = true,
1883         logx_secondary  = true,
1884         key = "x^2, logarithmic x scale",
1885         color = blue,
1886         explicit(x^2,x,1,100) )$
1887 @end example
1889 Véanse también @code{logx}, @code{logy}, @code{logy_secondary} y @code{logz}.
1891 @end defvr
1895 @defvr {Opción gráfica} logy
1896 Valor por defecto: @code{false}
1898 Cuando @code{logy} vale @code{true}, el eje @var{y} se dibuja
1899 en la escala logarítmica.
1901 Puesto que ésta es una opción global, su posición dentro de la
1902 descripción de la escena no reviste importancia.
1904 Ejemplo:
1906 @example
1907 (%i1) load("draw")$
1908 (%i2) draw2d(logy = true,
1909              explicit(exp(x),x,0,5))$
1910 @end example
1912 Véanse también @code{logx}, @code{logx_secondary}, @code{logy_secondary} y @code{logz}.
1913 @end defvr
1917 @defvr {Opción gráfica} logy_secondary
1918 Valor por defecto: @code{false}
1920 Si @code{logy_secondary} vale @code{true}, el eje secundario de @var{y} 
1921 se dibuja en la escala logarítmica.
1923 Puesto que ésta es una opción global, su posición dentro de la
1924 descripción de la escena no reviste importancia.
1926 Ejemplo:
1928 @example
1929 (%i1) load("draw")$
1930 (%i2) draw2d(
1931         grid = true,
1932         key="x^2, linear scale",
1933         color=red,
1934         explicit(x^2,x,1,100),
1935         yaxis_secondary = true,
1936         ytics_secondary = true,
1937         logy_secondary  = true,
1938         key = "x^2, logarithmic y scale",
1939         color = blue,
1940         explicit(x^2,x,1,100) )$
1941 @end example
1943 Véanse también @code{logx}, @code{logy}, @code{logx_secondary} y @code{logz}.
1945 @end defvr
1949 @defvr {Opción gráfica} logz
1950 Valor por defecto: @code{false}
1952 Cuando @code{logz} vale @code{true}, el eje @var{z} se dibuja
1953 en la escala logarítmica.
1955 Puesto que ésta es una opción global, su posición dentro de la
1956 descripción de la escena no reviste importancia.
1958 Ejemplo:
1960 @example
1961 (%i1) load("draw")$
1962 (%i2) draw3d(logz = true,
1963              explicit(exp(u^2+v^2),u,-2,2,v,-2,2))$
1964 @end example
1966 Véanse también @code{logx} and @code{logy}.
1967 @end defvr
1972 @defvr {Opción gráfica} nticks
1973 Valor por defecto: 29
1975 En 2d, @code{nticks} es el número de puntos a utilizar por el programa
1976 adaptativo que genera las funciones explícitas. También es el número de
1977 puntos que se representan en las curvas paramétricas y polares.
1979 Esta opción afecta a los siguientes objetos gráficos:
1980 @itemize @bullet
1981 @item
1982 @code{gr2d}: @code{ellipse}, @code{explicit}, @code{parametric} y @code{polar}.
1984 @item
1985 @code{gr3d}: @code{parametric}.
1986 @end itemize
1988 Ejemplo:
1990 @example
1991 (%i1) load("draw")$
1992 (%i2) draw2d(transparent = true,
1993              ellipse(0,0,4,2,0,180),
1994              nticks = 5,
1995              ellipse(0,0,4,2,180,180) )$
1996 @end example
1997 @end defvr
2003 @defvr {Opción gráfica} palette
2004 Valor por defecto: @code{color}
2006 @code{palette} indica cómo transformar niveles de gris en componentes cromáticas.
2007 Trabaja conjuntamente con la opción @code{enhanced3d} en gráficos 3D, la cual asocia cada punto
2008 de una superficie con un número real o nivel de gris. También trabaja con imágenes grises.
2009 Con @code{palette}, estos niveles se transforman en colores.
2011 Hay dos formas de definir estas transformaciones.
2013 En primer lugar, @code{palette} puede ser un vector de longitud tres con sus componentes tomando
2014 valores enteros en el rango desde -36 a +36; cada valor es un 
2015 índice para seleccionar una fórmula que transforma los niveles
2016 numéricos en las componentes cromáticas rojo, verde y azul:
2017 @example
2018  0: 0               1: 0.5           2: 1
2019  3: x               4: x^2           5: x^3
2020  6: x^4             7: sqrt(x)       8: sqrt(sqrt(x))
2021  9: sin(90x)       10: cos(90x)     11: |x-0.5|
2022 12: (2x-1)^2       13: sin(180x)    14: |cos(180x)|
2023 15: sin(360x)      16: cos(360x)    17: |sin(360x)|
2024 18: |cos(360x)|    19: |sin(720x)|  20: |cos(720x)|
2025 21: 3x             22: 3x-1         23: 3x-2
2026 24: |3x-1|         25: |3x-2|       26: (3x-1)/2
2027 27: (3x-2)/2       28: |(3x-1)/2|   29: |(3x-2)/2|
2028 30: x/0.32-0.78125 31: 2*x-0.84     32: 4x;1;-2x+1.84;x/0.08-11.5
2029 33: |2*x - 0.5|    34: 2*x          35: 2*x - 0.5
2030 36: 2*x - 1
2031 @end example
2032 los números negativos se interpretan como colores invertidos
2033 de las componentes cromáticas.
2034 @code{palette = gray} y @code{palette = color} son atajos para
2035 @code{palette = [3,3,3]} y @code{palette = [7,5,15]}, respectivamente.
2037 En segundo lugar, @code{palette} puede ser una paleta de colores definida
2038 por el usuario. En este caso, el formato para crear una paleta de longitud
2039 @code{n} es @code{palette=[color_1, color_2, ..., color_n]}, 
2040 donde @code{color_i} es un color correctamente definido (véase la opción
2041 @code{color}), de tal manera que @code{color_1} se asigna al valor más bajo
2042 del nivel y @code{color_n} al más alto. El resto de colores se interpolan.
2044 Puesto que ésta es una opción global, su posición dentro de la
2045 descripción de la escena no reviste importancia.
2047 Ejemplos:
2049 Trabaja conjuntamente con la opción @code{enhanced3d} en gráficos 3D.
2051 @example
2052 (%i1) load("draw")$
2053 (%i2) draw3d(
2054         enhanced3d = [z-x+2*y,x,y,z],
2055         palette = [32, -8, 17],
2056         explicit(20*exp(-x^2-y^2)-10,x,-3,3,y,-3,3))$
2057 @end example
2059 También trabaja con imágenes grises.
2061 @example
2062 (%i1) load("draw")$
2063 (%i2) im: apply(
2064            'matrix,
2065             makelist(makelist(random(200),i,1,30),i,1,30))$
2066 (%i3) /* palette = color, default */
2067       draw2d(image(im,0,0,30,30))$
2068 (%i4) draw2d(palette = gray, image(im,0,0,30,30))$
2069 (%i5) draw2d(palette = [15,20,-4],
2070              colorbox=false,
2071              image(im,0,0,30,30))$
2072 @end example
2074 @code{palette} puede ser una paleta de colores definida
2075 por el usuario. En este ejemplo, valores bajos de @code{x}
2076 se colorean en rojo y altos en amarillo.
2078 @example
2079 (%i1) load("draw")$
2080 (%i2) draw3d(
2081          palette = [red, blue, yellow],
2082          enhanced3d = x,
2083          explicit(x^2+y^2,x,-1,1,y,-1,1)) $
2084 @end example
2086 Véase también @code{colorbox} y @code{enhanced3d}.
2087 @end defvr
2091 @defvr {Opción gráfica} point_size
2092 Valor por defecto: 1
2094 @code{point_size} establece el tamaño de los puntos dibujados. Debe
2095 ser un número no negativo.
2097 Esta opción no tiene efecto alguno cuando a la opción gráfica
2098 @code{point_type} se le ha dado el valor @code{dot}.
2100 Esta opción afecta a los siguientes objetos gráficos:
2101 @itemize @bullet
2102 @item
2103 @code{gr2d}: @code{points}.
2105 @item
2106 @code{gr3d}: @code{points}.
2107 @end itemize
2109 Ejemplo:
2111 @example
2112 (%i1) load("draw")$
2113 (%i2) draw2d(
2114         points(makelist([random(20),random(50)],k,1,10)),
2115         point_size = 5,
2116         points(makelist(k,k,1,20),makelist(random(30),k,1,20)))$
2117 @end example
2118 @end defvr
2122 @defvr {Opción gráfica} point_type
2123 Valor por defecto: 1
2125 @code{point_type} indica cómo se van a dibujar los puntos aislados. Los valores
2126 para esta opción pueden ser índices enteros mayores o iguales que -1,
2127 o también nombres de estilos: @code{$none} (-1), @code{dot} (0), @code{plus} (1),
2128 @code{multiply} (2), @code{asterisk} (3), @code{square} (4), @code{filled_square} (5),
2129 @code{circle} (6), @code{filled_circle} (7), @code{up_triangle} (8), 
2130 @code{filled_up_triangle} (9), @code{down_triangle} (10), 
2131 @code{filled_down_triangle} (11), @code{diamant} (12) y @code{filled_diamant} (13).
2133 Esta opción afecta a los siguientes objetos gráficos:
2134 @itemize @bullet
2135 @item
2136 @code{gr2d}: @code{points}.
2138 @item
2139 @code{gr3d}: @code{points}.
2140 @end itemize
2142 Ejemplo:
2144 @example
2145 (%i1) load("draw")$
2146 (%i2) draw2d(xrange = [0,10],
2147              yrange = [0,10],
2148              point_size = 3,
2149              point_type = diamant,
2150              points([[1,1],[5,1],[9,1]]),
2151              point_type = filled_down_triangle,
2152              points([[1,2],[5,2],[9,2]]),
2153              point_type = asterisk,
2154              points([[1,3],[5,3],[9,3]]),
2155              point_type = filled_diamant,
2156              points([[1,4],[5,4],[9,4]]),
2157              point_type = 5,
2158              points([[1,5],[5,5],[9,5]]),
2159              point_type = 6,
2160              points([[1,6],[5,6],[9,6]]),
2161              point_type = filled_circle,
2162              points([[1,7],[5,7],[9,7]]),
2163              point_type = 8,
2164              points([[1,8],[5,8],[9,8]]),
2165              point_type = filled_diamant,
2166              points([[1,9],[5,9],[9,9]]) )$
2167 @end example
2168 @end defvr
2172 @defvr {Opción gráfica} points_joined
2173 Valor por defecto: @code{false}
2175 Cuando @code{points_joined} vale @code{true}, los puntos se unen con segmentos;
2176 si vale @code{false}, se dibujarán puntos aislados. Un tercer valor posible
2177 para esta opción gráfica es @code{impulses}; en tal caso, se dibujarán
2178 segmentos verticales desde los puntos hasta el eje-x (2D) o hasta el plano-xy (3D).
2180 Esta opción afecta a los siguientes objetos gráficos:
2181 @itemize @bullet
2182 @item
2183 @code{gr2d}: @code{points}.
2185 @item
2186 @code{gr3d}: @code{points}.
2187 @end itemize
2189 Ejemplo:
2191 @example
2192 (%i1) load("draw")$
2193 (%i2) draw2d(xrange        = [0,10],
2194              yrange        = [0,4],
2195              point_size    = 3,
2196              point_type    = up_triangle,
2197              color         = blue,
2198              points([[1,1],[5,1],[9,1]]),
2199              points_joined = true,
2200              point_type    = square,
2201              line_type     = dots,
2202              points([[1,2],[5,2],[9,2]]),
2203              point_type    = circle,
2204              color         = red,
2205              line_width    = 7,
2206              points([[1,3],[5,3],[9,3]]) )$
2207 @end example
2208 @end defvr
2212 @defvr {Opción gráfica} proportional_axes
2213 Valor por defecto: @code{none}
2215 Cuando @code{proportional_axes} es igual a @code{xy} o @code{xy}, una escena
2216 2D o 3D se dibujará con los ejes proporcionales a sus longitudes relativas.
2218 Puesto que ésta es una opción global, su posición dentro de la
2219 descripción de la escena no reviste importancia.
2221 Esta opción sólo funciona con Gnuplot versión 4.2.6
2222 o superior.
2224 Ejemplos:
2226 Gráfico en 2D.
2228 @example
2229 (%i1) load("draw")$
2230 (%i2) draw2d(
2231         ellipse(0,0,1,1,0,360),
2232         transparent=true,
2233         color = blue,
2234         line_width = 4,
2235         ellipse(0,0,2,1/2,0,360),
2236         proportional_axes = xy) $
2237 @end example
2239 Multiplot.
2241 @example
2242 (%i1) load("draw")$
2243 (%i2) draw(
2244         terminal = wxt,
2245         gr2d(proportional_axes = xy,
2246              explicit(x^2,x,0,1)),
2247         gr2d(explicit(x^2,x,0,1),
2248              xrange = [0,1],
2249              yrange = [0,2],
2250              proportional_axes=xy),
2251         gr2d(explicit(x^2,x,0,1)))$
2252 @end example
2254 @end defvr
2259 @defvr {Opción gráfica} surface_hide
2260 Valor por defecto: @code{false}
2262 Cuando @code{surface_hide} vale @code{true}, las partes ocultas no
2263 se muestran en las superficies de las escenas 3d.
2265 Puesto que ésta es una opción global, su posición dentro de la
2266 descripción de la escena no reviste importancia.
2268 Ejemplo:
2270 @example
2271 (%i1) load("draw")$
2272 (%i2) draw(columns=2,
2273            gr3d(explicit(exp(sin(x)+cos(x^2)),x,-3,3,y,-3,3)),
2274            gr3d(surface_hide = true,
2275                 explicit(exp(sin(x)+cos(x^2)),x,-3,3,y,-3,3)) )$
2276 @end example
2277 @end defvr
2282 @defvr {Opción gráfica} terminal
2283 Valor por defecto: @code{screen}
2285 Selecciona el terminal a utilizar por Gnuplot; valores posibles son:
2286 @code{screen} (por defecto), @code{png}, @code{pngcairo}, @code{jpg}, @code{gif}, 
2287 @code{eps}, @code{eps_color}, @code{epslatex}, @code{epslatex_standalone}, 
2288 @code{svg}, @code{dumb}, @code{dumb_file}, @code{pdf}, @code{pdfcairo}, 
2289 @code{wxt}, @code{animated_gif}, @code{multipage_pdfcairo}, @code{multipage_pdf}, 
2290 @code{multipage_eps}, @code{multipage_eps_color} y @code{aquaterm}.
2292 Los terminales @code{screen}, @code{wxt} y @code{aquaterm} también se pueden 
2293 definir como una lista de dos elementos: el propio nombre del terminal y un 
2294 número entero no negativo. De esta forma se pueden abrir varias ventanas al
2295 mismo tiempo, cada una de ellas con su número correspondiente. Esta modalidad
2296 no funciona en plataformas Windows.
2298 Puesto que ésta es una opción global, su posición dentro de la
2299 descripción de la escena no reviste importancia. También puede
2300 usarse como argumento de la función @code{draw}.
2302 pdfcairo necesita Gnuplot 4.3. 
2303 @code{pdf} necesita que Gnuplot haya sido compilado con la opción @code{--enable-pdf} y libpdf debe
2304 estar instalado (@url{http://www.pdflib.com/en/download/pdflib-family/pdflib-lite/}).
2306 Ejemplos:
2308 @example
2309 (%i1) load("draw")$
2310 (%i2) /* screen terminal (default) */
2311       draw2d(explicit(x^2,x,-1,1))$
2312 (%i3) /* png file */
2313       draw2d(terminal  = 'png,
2314              explicit(x^2,x,-1,1))$
2315 (%i4) /* jpg file */
2316       draw2d(terminal   = 'jpg,
2317              dimensions = [300,300],
2318              explicit(x^2,x,-1,1))$
2319 (%i5) /* eps file */
2320       draw2d(file_name = "myfile",
2321              explicit(x^2,x,-1,1),
2322              terminal  = 'eps)$
2323 (%i6) /* pdf file */
2324       draw2d(file_name = "mypdf",
2325              dimensions = 100*[12.0,8.0],
2326              explicit(x^2,x,-1,1),
2327              terminal  = 'pdf)$
2328 (%i7) /* wxwidgets window */
2329       draw2d(explicit(x^2,x,-1,1),
2330              terminal  = 'wxt)$
2331 @end example
2333 Ventanas múltiples.
2334 @example
2335 (%i1) load("draw")$
2336 (%i2) draw2d(explicit(x^5,x,-2,2), terminal=[screen, 3])$
2337 (%i3) draw2d(explicit(x^2,x,-2,2), terminal=[screen, 0])$
2338 @end example
2340 Un fichero gif animado.
2341 @example
2342 (%i1) load("draw")$
2343 (%i2) draw(
2344         delay     = 100,
2345         file_name = "zzz",
2346         terminal  = 'animated_gif,
2347         gr2d(explicit(x^2,x,-1,1)),
2348         gr2d(explicit(x^3,x,-1,1)),
2349         gr2d(explicit(x^4,x,-1,1)));
2350 End of animation sequence
2351 (%o2)          [gr2d(explicit), gr2d(explicit), gr2d(explicit)]
2352 @end example
2354 La opción @code{delay} sólo se activa en caso de gifs animados; se ignora en
2355 cualquier otro caso.
2357 Salida multipágina en formato eps.
2358 @example
2359 (%i1) load("draw")$
2360 (%i2) draw(
2361         file_name = "parabol",
2362         terminal  = multipage_eps,
2363         dimensions = 100*[10,10],
2364         gr2d(explicit(x^2,x,-1,1)),
2365         gr3d(explicit(x^2+y^2,x,-1,1,y,-1,1))) $
2366 @end example
2368 Véanse también @code{file_name}, @code{pic_width}, @code{pic_height} y @code{delay}.
2369 @end defvr
2374 @defvr {Opción gráfica} title
2375 Valor por defecto: @code{""} (cadena vacía)
2377 La opción @code{title} almacena una cadena con el 
2378 título de la escena. Por defecto, no se escribe
2379 título alguno.
2381 Puesto que ésta es una opción global, su posición dentro de la
2382 descripción de la escena no reviste importancia.
2384 Ejemplo:
2386 @example
2387 (%i1) load("draw")$
2388 (%i2) draw2d(explicit(exp(u),u,-2,2),
2389              title = "Exponential function")$
2390 @end example
2391 @end defvr
2395 @defvr {Opción gráfica} transform
2396 Valor por defecto: @code{none}
2398 Si @code{transform} vale @code{none}, el espacio no sufre transformación
2399 alguna y los objetos gráficos se representan tal cual se definen. Si es
2400 necesario transformar el espacio, se debe asignar una lista a la opción
2401 @code{transform}. En caso de una escena 2D, la lista toma la forma
2402 @code{[f1(x,y), f2(x,y), x, y]}.
2403 En caso de una escena 3D, la lista debe ser de la forma
2404 @code{[f1(x,y,z), f2(x,y,z), f3(x,y,z), x, y, z]}.
2406 Los nombres de las variables definidas en las listas pueden ser diferentes
2407 de aquellas utilizadas en las definiciones de los objetos gráficos.
2409 Ejemplos:
2411 Rotación en 2D.
2413 @example
2414 (%i1) load("draw")$
2415 (%i2) th : %pi / 4$
2416 (%i3) draw2d(
2417         color = "#e245f0",
2418         proportional_axes = 'xy,
2419         line_width = 8,
2420         triangle([3,2],[7,2],[5,5]),
2421         border     = false,
2422         fill_color = yellow,
2423         transform  = [cos(th)*x - sin(th)*y,
2424                       sin(th)*x + cos(th)*y, x, y],
2425         triangle([3,2],[7,2],[5,5]) )$
2426 @end example
2428 Traslación en 3D.
2430 @example
2431 (%i1) load("draw")$
2432 (%i2) draw3d(
2433         color     = "#a02c00",
2434         explicit(20*exp(-x^2-y^2)-10,x,-3,3,y,-3,3),
2435         transform = [x+10,y+10,z+10,x,y,z],
2436         color     = blue,
2437         explicit(20*exp(-x^2-y^2)-10,x,-3,3,y,-3,3) )$
2438 @end example
2439 @end defvr
2443 @defvr {Opción gráfica} transparent
2444 Valor por defecto: @code{false}
2446 Cuando @code{transparent} vale @code{false}, las regiones internas de 
2447 los polígonos se rellenan de acuerdo con @code{fill_color}.
2449 Esta opción afecta a los siguientes objetos gráficos:
2450 @itemize @bullet
2451 @item
2452 @code{gr2d}: @code{polygon}, @code{rectangle} y @code{ellipse}.
2453 @end itemize
2455 Ejemplo:
2457 @example
2458 (%i1) load("draw")$
2459 (%i2) draw2d(polygon([[3,2],[7,2],[5,5]]),
2460              transparent = true,
2461              color       = blue,
2462              polygon([[5,2],[9,2],[7,5]]) )$
2463 @end example
2464 @end defvr
2468 @defvr {Opción gráfica} unit_vectors
2469 Valor por defecto: @code{false}
2471 Cuando @code{unit_vectors} vale @code{true}, los vectores se dibujan con módulo unidad.
2472 Esta opción es útil para representar campos vectoriales. Cuando @code{unit_vectors} vale @code{false},
2473 los vectores se dibujan con su longitud original.
2475 Esta opción sólo es relevante para objetos de tipo @code{vector}.
2477 Ejemplo:
2479 @example
2480 (%i1) load("draw")$
2481 (%i2) draw2d(xrange      = [-1,6],
2482              yrange      = [-1,6],
2483              head_length = 0.1,
2484              vector([0,0],[5,2]),
2485              unit_vectors = true,
2486              color        = red,
2487              vector([0,3],[5,2]))$
2488 @end example
2489 @end defvr
2494 @defvr {Opción gráfica} user_preamble
2495 Valor por defecto: @code{""} (cadena vacía)
2497 Usuarios expertos en Gnuplot pueden hacer uso de esta opción para
2498 afinar el comportamiento de Gnuplot escribiendo código que será
2499 enviado justo antes de la instrucción @code{plot} o @code{splot}.
2501 El valor dado a esta opción debe ser una cadena alfanumérica o
2502 una lista de cadenas (una por línea).
2504 Puesto que ésta es una opción global, su posición dentro de la
2505 descripción de la escena no reviste importancia.
2507 Ejemplo:
2509 Se le indica a Gnuplot que dibuje los ejes encima de todos los demás objetos,
2510 @example
2511 (%i1) load("draw")$
2512 (%i2) draw2d(
2513         xaxis =true, xaxis_type=solid,
2514         yaxis =true, yaxis_type=solid,
2515         user_preamble="set grid front",
2516         region(x^2+y^2<1 ,x,-1.5,1.5,y,-1.5,1.5))$
2517 @end example
2518 @end defvr
2522 @defvr {Opción gráfica} view
2523 Valor por defecto: @code{[60,30]}
2525 Un par de ángulos, medidos en grados, indicando la dirección del 
2526 observador en una escena 3D. El primer ángulo es la rotación 
2527 vertical alrededor del eje @var{x}, dentro del intervalo @math{[0, 360]}.
2528 El segundo es la rotación horizontal alrededor del eje @var{z}, dentro
2529 del intervalo @math{[0, 360]}.
2531 Dándole a la opción @code{view} el valor @code{map}, la dirección del 
2532 observador se sitúa perpendicularmente al plano-xy.
2534 Puesto que ésta es una opción global, su posición dentro de la
2535 descripción de la escena no reviste importancia.
2537 Ejemplo:
2539 @example
2540 (%i1) load("draw")$
2541 (%i2) draw3d(view = [170, 50],
2542              enhanced3d = true,
2543              explicit(sin(x^2+y^2),x,-2,2,y,-2,2) )$
2544 (%i3) draw3d(view = map,
2545              enhanced3d = true,
2546              explicit(sin(x^2+y^2),x,-2,2,y,-2,2) )$
2547 @end example
2548 @end defvr
2553 @defvr {Opción gráfica} wired_surface
2554 Valor por defecto: @code{false}
2556 Indica si las superficies en 3D en modo @code{enhanced3d} deben mostrar o no la malla que
2557 unen los puntos.
2559 Puesto que ésta es una opción global, su posición dentro de la
2560 descripción de la escena no reviste importancia.
2562 Ejemplo:
2564 @example
2565 (%i1) load("draw")$
2566 (%i2) draw3d(
2567         enhanced3d    = [sin(x),x,y],
2568         wired_surface = true,
2569         explicit(x^2+y^2,x,-1,1,y,-1,1)) $
2570 @end example
2572 @end defvr
2577 @defvr {Opción gráfica} x_voxel
2578 Valor por defecto: 10
2580 @code{x_voxel} es el número de voxels en la dirección x a utilizar
2581 por el algoritmo @i{marching cubes} implementado por el objeto 
2582 @code{implicit} tridimensional. También se utiliza como opción
2583 del objeto gráfico @code{region}.
2584 @end defvr
2588 @defvr {Opción gráfica} xaxis
2589 Valor por defecto: @code{false}
2591 Si @code{xaxis} vale @code{true}, se dibujará el eje @var{x}.
2593 Puesto que ésta es una opción global, su posición dentro de la
2594 descripción de la escena no reviste importancia.
2596 Ejemplo:
2598 @example
2599 (%i1) load("draw")$
2600 (%i2) draw2d(explicit(x^3,x,-1,1),
2601              xaxis       = true,
2602              xaxis_color = blue)$
2603 @end example
2605 Véanse también @code{xaxis_width}, @code{xaxis_type} y @code{xaxis_color}.
2606 @end defvr
2611 @defvr {Opción gráfica} xaxis_color
2612 Valor por defecto: @code{"black"}
2614 @code{xaxis_color} especifica el color para el eje @var{x}. Véase
2615 @code{color} para ver cómo se definen los colores.
2617 Puesto que ésta es una opción global, su posición dentro de la
2618 descripción de la escena no reviste importancia.
2620 Ejemplo:
2622 @example
2623 (%i1) load("draw")$
2624 (%i2) draw2d(explicit(x^3,x,-1,1),
2625              xaxis       = true,
2626              xaxis_color = red)$
2627 @end example
2629 Véanse también @code{xaxis}, @code{xaxis_width} y @code{xaxis_type}.
2630 @end defvr
2635 @defvr {Opción gráfica} xaxis_secondary
2636 Valor por defecto: @code{false}
2638 Si @code{xaxis_secondary} vale @code{true}, los valores de las funciones se pueden representar
2639 respecto del eje @var{x} secundario, el cual se dibuja en la parte superior de la escena.
2641 Nótese que esta es una opción gráfica local que sólo afecta a objetos 2d.
2643 Ejemplo:
2645 @example
2646 (%i1) load("draw")$
2647 (%i2) draw2d(
2648          key   = "Bottom x-axis",
2649          explicit(x+1,x,1,2),
2650          color = red,
2651          key   = "Above x-axis",
2652          xtics_secondary = true,
2653          xaxis_secondary = true,
2654          explicit(x^2,x,-1,1)) $
2655 @end example
2657 Véanse también @code{xrange_secondary}, @code{xtics_secondary}, @code{xtics_rotate_secondary},
2658 @code{xtics_axis_secondary} y @code{xaxis_secondary}.
2660 @end defvr
2665 @defvr {Opción gráfica} xaxis_type
2666 Valor por defecto: @code{dots}
2668 @code{xaxis_type} indica cómo se debe dibujar el eje @var{x}; 
2669 valores admisibles son @code{solid} y @code{dots}.
2671 Puesto que ésta es una opción global, su posición dentro de la
2672 descripción de la escena no reviste importancia.
2674 Ejemplo:
2676 @example
2677 (%i1) load("draw")$
2678 (%i2) draw2d(explicit(x^3,x,-1,1),
2679              xaxis       = true,
2680              xaxis_type  = solid)$
2681 @end example
2683 Véanse también @code{xaxis}, @code{xaxis_width} y @code{xaxis_color}.
2684 @end defvr
2689 @defvr {Opción gráfica} xaxis_width
2690 Valor por defecto: 1
2692 @code{xaxis_width} es el ancho del eje @var{x}.
2693 Su valor debe ser un número positivo.
2695 Puesto que ésta es una opción global, su posición dentro de la
2696 descripción de la escena no reviste importancia.
2698 Ejemplo:
2700 @example
2701 (%i1) load("draw")$
2702 (%i2) draw2d(explicit(x^3,x,-1,1),
2703              xaxis       = true,
2704              xaxis_width = 3)$
2705 @end example
2707 Véanse también @code{xaxis}, @code{xaxis_type} y @code{xaxis_color}.
2708 @end defvr
2713 @defvr {Opción gráfica} xlabel
2714 Valor por defecto: @code{""}
2716 La opción @code{xlabel} almacena una cadena con la
2717 etiqueta del eje @var{x}. Por defecto, el eje tiene etiqueta @code{"x"}.
2719 Puesto que ésta es una opción global, su posición dentro de la
2720 descripción de la escena no reviste importancia.
2722 Ejemplo:
2724 @example
2725 (%i1) load("draw")$
2726 (%i2) draw2d(xlabel = "Time",
2727              explicit(exp(u),u,-2,2),
2728              ylabel = "Population")$
2729 @end example
2731 Véanse también @code{xlabel_secondary}, @code{ylabel}, @code{ylabel_secondary} y @code{zlabel}.
2732 @end defvr
2736 @defvr {Opción gráfica} xlabel_secondary
2737 Valor por defecto: @code{""} (cadena vacía)
2739 La opción @code{xlabel_secondary} almacena una cadena con la
2740 etiqueta del eje @var{x} secundario. Por defecto, el eje no tiene etiqueta.
2742 Puesto que ésta es una opción global, su posición dentro de la
2743 descripción de la escena no reviste importancia.
2745 Ejemplo:
2747 @example
2748 (%i1) load("draw")$
2749 (%i2) draw2d(
2750          xaxis_secondary=true,yaxis_secondary=true,
2751          xtics_secondary=true,ytics_secondary=true,
2752          xlabel_secondary="t[s]",
2753          ylabel_secondary="U[V]",
2754          explicit(sin(t),t,0,10) )$
2755 @end example
2757 Véanse también @code{xlabel}, @code{ylabel}, @code{ylabel_secondary} y @code{zlabel}.
2759 @end defvr
2763 @defvr {Opción gráfica} xrange
2764 Valor por defecto: @code{auto}
2766 Cuando @code{xrange} vale @code{auto}, el rango de la coordenada @var{x}
2767 se calcula de forma automática.
2769 Si el usuario quiere especificar un intervalo para @var{x}, éste debe
2770 expresarse como una lista de Maxima, como en @code{xrange=[-2, 3]}.
2772 Puesto que ésta es una opción global, su posición dentro de la
2773 descripción de la escena no reviste importancia.
2775 Ejemplo:
2777 @example
2778 (%i1) load("draw")$
2779 (%i2) draw2d(xrange = [-3,5],
2780              explicit(x^2,x,-1,1))$
2781 @end example
2783 Véanse también @code{yrange} y @code{zrange}.
2784 @end defvr
2789 @defvr {Opción gráfica} xrange_secondary
2790 Valor por defecto: @code{auto}
2792 Cuando @code{xrange_secondary} vale @code{auto}, el rango del eje @var{x}
2793 secundario se calcula de forma automática.
2795 Si el usuario quiere especificar un intervalo para el eje @var{x} secundario, éste debe
2796 expresarse como una lista de Maxima, como en @code{xrange_secondary=[-2, 3]}.
2798 Puesto que ésta es una opción global, su posición dentro de la
2799 descripción de la escena no reviste importancia.
2801 Véanse también @code{xrange}, @code{yrange}, @code{zrange} y @code{yrange_secondary}.
2802 @end defvr
2807 @defvr {Opción gráfica} xtics
2808 Valor por defecto: @code{true}
2810 Esta opción gráfica controla la forma en la que se dibujarán las marcas
2811 del eje @var{x}.
2813 @itemize @bullet
2814 @item
2815 Cuando a @code{xtics} se le da el valor @var{true}, las marcas se dibujarán de
2816 forma automática.
2818 @item
2819 Cuando a @code{xtics} se le da el valor @var{false}, no habrá marcas en los ejes.
2821 @item
2822 Cuando a @code{xtics} se le da un valor numérico positivo, se interpretará como la
2823 distancia entre dos marcas consecutivas.
2825 @item
2826 Cuando a @code{xtics} se le da una lista de longitud tres de la forma 
2827 @code{[start,incr,end]}, las marcas se dibujarán desde @code{start} 
2828 hasta @code{end} a intervalos de longitud @code{incr}.
2830 @item
2831 Cuando a @code{xtics} se le da un conjunto de números de la forma
2832 @code{@{n1, n2, ...@}}, las marcas se dibujarán exactamente en los valores
2833 @code{n1}, @code{n2}, ...
2835 @item
2836 Cuando a @code{xtics} se le da un conjunto de pares de la forma
2837 @code{@{["label1", n1], ["label2", n2], ...@}}, las marcas correspondientes a los valores
2838 @code{n1}, @code{n2}, ... se etiquetarán con @code{"label1"}, @code{"label2"}, ..., respectivamente.
2839 @end itemize
2841 Puesto que ésta es una opción global, su posición dentro de la
2842 descripción de la escena no reviste importancia.
2844 Ejemplos:
2846 Marcas desactivadas.
2847 @example
2848 (%i1) load("draw")$
2849 (%i2) draw2d(xtics = 'false,
2850              explicit(x^3,x,-1,1)  )$
2851 @end example
2853 Marcas cada 1/4 unidades.
2854 @example
2855 (%i1) load("draw")$
2856 (%i2) draw2d(xtics = 1/4,
2857              explicit(x^3,x,-1,1)  )$
2858 @end example
2860 Marcas desde -3/4 hasta 3/4 en saltos de 1/8.
2861 @example
2862 (%i1) load("draw")$
2863 (%i2) draw2d(xtics = [-3/4,1/8,3/4],
2864              explicit(x^3,x,-1,1)  )$
2865 @end example
2867 Marcas en los puntos -1/2, -1/4 y 3/4.
2868 @example
2869 (%i1) load("draw")$
2870 (%i2) draw2d(xtics = @{-1/2,-1/4,3/4@},
2871              explicit(x^3,x,-1,1)  )$
2872 @end example
2874 Marcas etiquetadas.
2875 @example
2876 (%i1) load("draw")$
2877 (%i2) draw2d(xtics = @{["High",0.75],["Medium",0],["Low",-0.75]@},
2878              explicit(x^3,x,-1,1)  )$
2879 @end example
2880 @end defvr
2885 @defvr {Opción gráfica} xtics_axis
2886 Valor por defecto: @code{false}
2888 Si @code{xtics_axis} vale @code{true}, las marcas y sus etiquetas se dibujan sobre
2889 el propio eje @var{x}, si vale @code{false} las marcas se colocan a lo largo del borde
2890 del gráfico.
2892 Puesto que ésta es una opción global, su posición dentro de la
2893 descripción de la escena no reviste importancia.
2894 @end defvr
2898 @defvr {Opción gráfica} xtics_rotate
2899 Valor por defecto: @code{false}
2901 Si @code{xtics_rotate} vale @code{true}, las marcas del eje @var{x} se giran 
2902 90 grados.
2904 Puesto que ésta es una opción global, su posición dentro de la
2905 descripción de la escena no reviste importancia.
2906 @end defvr
2910 @defvr {Opción gráfica} xtics_rotate_secondary
2911 Valor por defecto: @code{false}
2913 Si @code{xtics_rotate_secondary} vale @code{true}, las marcas del eje @var{x} 
2914 secundario se giran 90 grados.
2916 Puesto que ésta es una opción global, su posición dentro de la
2917 descripción de la escena no reviste importancia.
2918 @end defvr
2922 @defvr {Opción gráfica} xtics_secondary
2923 Valor por defecto: @code{auto}
2925 Esta opción gráfica controla la forma en la que se dibujarán las marcas
2926 del eje @var{x} secundario.
2928 Véase @code{xtics} para una descripción completa.
2929 @end defvr
2933 @defvr {Opción gráfica} xtics_secondary_axis
2934 Valor por defecto: @code{false}
2936 Si @code{xtics_secondary_axis} vale @code{true}, las marcas y sus etiquetas se dibujan sobre
2937 el propio eje @var{x} secundario, si vale @code{false} las marcas se colocan a lo largo del borde
2938 del gráfico.
2940 Puesto que ésta es una opción global, su posición dentro de la
2941 descripción de la escena no reviste importancia.
2942 @end defvr
2946 @defvr {Opción gráfica} xu_grid
2947 Valor por defecto: 30
2949 @code{xu_grid} es el número de coordenadas de la primera variable
2950 (@code{x} en superficies explcítas y @code{u} en las
2951 paramétricas) para formar la rejilla de puntos muestrales.
2953 Esta opción afecta a los siguientes objetos gráficos:
2954 @itemize @bullet
2955 @item
2956 @code{gr3d}: @code{explicit} y @code{parametric_surface}.
2957 @end itemize
2959 Ejemplo:
2961 @example
2962 (%i1) load("draw")$
2963 (%i2) draw3d(xu_grid = 10,
2964              yv_grid = 50,
2965              explicit(x^2+y^2,x,-3,3,y,-3,3) )$
2966 @end example
2968 Véase también @code{yv_grid}.
2969 @end defvr
2974 @defvr {Opción gráfica} xy_file
2975 Valor por defecto: @code{""} (cadena vacía)
2977 @code{xy_file} es el nombre del fichero donde se almacenarán las
2978 coordenadas después de hacer clic con el botón del ratón en un
2979 punto de la imagen y pulsado la tecla 'x'. Por defecto, las 
2980 coordenadas no se almacenan.
2982 Puesto que ésta es una opción global, su posición dentro de la
2983 descripción de la escena no reviste importancia.
2984 @end defvr
2989 @defvr {Graphic option} xyplane
2990 Valor por defecto: @code{false}
2992 Coloca el plano-xy en escenas 3D. Si @code{xyplane} vale @code{false},
2993 el plano-xy se coloca automáticamente; en cambio, si toma un
2994 valor real, el plano-xy intersectará con el eje @var{z} a ese nivel.
2995 Esta opción no tiene efecto alguno en escenas 2D.
2997 Puesto que ésta es una opción global, su posición dentro de la
2998 descripción de la escena no reviste importancia.
3000 Ejemplo:
3002 @example
3003 (%i1) load("draw")$
3004 (%i2) draw3d(xyplane = %e-2,
3005              explicit(x^2+y^2,x,-1,1,y,-1,1))$
3006 @end example
3007 @end defvr
3012 @defvr {Opción gráfica} y_voxel
3013 Valor por defecto: 10
3015 @code{y_voxel} es el número de voxels en la dirección y a utilizar
3016 por el algoritmo @i{marching cubes} implementado por el objeto 
3017 @code{implicit} tridimensional. También se utiliza como opción
3018 del objeto gráfico @code{region}.
3019 @end defvr
3024 @defvr {Opción gráfica} yaxis
3025 Valor por defecto: @code{false}
3027 Si @code{yaxis} vale @code{true}, se dibujará el eje @var{y}.
3029 Puesto que ésta es una opción global, su posición dentro de la
3030 descripción de la escena no reviste importancia.
3032 Ejemplo:
3034 @example
3035 (%i1) load("draw")$
3036 (%i2) draw2d(explicit(x^3,x,-1,1),
3037              yaxis       = true,
3038              yaxis_color = blue)$
3039 @end example
3041 Véanse también @code{yaxis_width}, @code{yaxis_type} y @code{yaxis_color}.
3042 @end defvr
3046 @defvr {Opción gráfica} yaxis_color
3047 Valor por defecto: @code{"black"}
3049 @code{yaxis_color} especifica el color para el eje @var{y}. Véase
3050 @code{color} para ver cómo se definen los colores.
3052 Puesto que ésta es una opción global, su posición dentro de la
3053 descripción de la escena no reviste importancia.
3055 Ejemplo:
3057 @example
3058 (%i1) load("draw")$
3059 (%i2) draw2d(explicit(x^3,x,-1,1),
3060              yaxis       = true,
3061              yaxis_color = red)$
3062 @end example
3064 Véanse también @code{yaxis}, @code{yaxis_width} y @code{yaxis_type}.
3065 @end defvr
3070 @defvr {Opción gráfica} yaxis_secondary
3071 Valor por defecto: @code{false}
3073 Si @code{yaxis_secondary} vale @code{true}, los valores de las funciones se pueden representar
3074 respecto del eje @var{y} secundario, el cual se dibuja al lado derecho de la escena.
3076 Nótese que esta es una opción gráfica local que sólo afecta a objetos 2d.
3078 Ejemplo:
3080 @example
3081 (%i1) load("draw")$
3082 (%i2) draw2d(
3083          explicit(sin(x),x,0,10),
3084          yaxis_secondary = true,
3085          ytics_secondary = true,
3086          color = blue,
3087          explicit(100*sin(x+0.1)+2,x,0,10));
3088 @end example
3090 Véanse también @code{yrange_secondary}, @code{ytics_secondary}, @code{ytics_rotate_secondary}
3091 y @code{ytics_axis_secondary}.
3093 @end defvr
3098 @defvr {Opción gráfica} yaxis_type
3099 Valor por defecto: @code{dots}
3101 @code{yaxis_type} indica cómo se debe dibujar el eje @var{y}; 
3102 valores admisibles son @code{solid} y @code{dots}.
3104 Puesto que ésta es una opción global, su posición dentro de la
3105 descripción de la escena no reviste importancia.
3107 Ejemplo:
3109 @example
3110 (%i1) load("draw")$
3111 (%i2) draw2d(explicit(x^3,x,-1,1),
3112              yaxis       = true,
3113              yaxis_type  = solid)$
3114 @end example
3116 Véanse también @code{yaxis}, @code{yaxis_width} y @code{yaxis_color}.
3117 @end defvr
3122 @defvr {Opción gráfica} yaxis_width
3123 Valor por defecto: 1
3125 @code{yaxis_width} es el ancho del eje @var{y}.
3126 Su valor debe ser un número positivo.
3128 Puesto que ésta es una opción global, su posición dentro de la
3129 descripción de la escena no reviste importancia.
3131 Ejemplo:
3133 @example
3134 (%i1) load("draw")$
3135 (%i2) draw2d(explicit(x^3,x,-1,1),
3136              yaxis       = true,
3137              yaxis_width = 3)$
3138 @end example
3140 Véanse también @code{yaxis}, @code{yaxis_type} y @code{yaxis_color}.
3141 @end defvr
3146 @defvr {Opción gráfica} ylabel
3147 Valor por defecto: @code{""}
3149 La opción @code{ylabel} almacena una cadena con la
3150 etiqueta del eje @var{y}. Por defecto, el eje tiene etiqueta @code{"y"}.
3152 Puesto que ésta es una opción global, su posición dentro de la
3153 descripción de la escena no reviste importancia.
3155 Ejemplo:
3157 @example
3158 (%i1) load("draw")$
3159 (%i2) draw2d(xlabel = "Time",
3160              ylabel = "Population",
3161              explicit(exp(u),u,-2,2) )$
3162 @end example
3164 Véanse también @code{xlabel}, @code{xlabel_secondary}, @code{ylabel_secondary} y @code{zlabel}.
3165 @end defvr
3173 @defvr {Opción gráfica} ylabel_secondary
3174 Valor por defecto: @code{""} (cadena vacía)
3177 La opción @code{ylabel_secondary} almacena una cadena con la
3178 etiqueta del eje @var{y} secundario. Por defecto, el eje no tiene etiqueta.
3180 Puesto que ésta es una opción global, su posición dentro de la
3181 descripción de la escena no reviste importancia.
3183 Ejemplo:
3185 @example
3186 (%i1) load("draw")$
3187 (%i2) draw2d(
3188         key="current",
3189         xlabel="t[s]",
3190         ylabel="I[A]",ylabel_secondary="P[W]",
3191         explicit(sin(t),t,0,10),
3192         yaxis_secondary=true,
3193         ytics_secondary=true,
3194         color=red,key="Power",
3195         explicit((sin(t))^2,t,0,10)
3196     )$
3197 @end example
3199 Véanse también @code{xlabel}, @code{xlabel_secondary}, @code{ylabel} and @code{zlabel}.
3201 @end defvr
3205 @defvr {Opción gráfica} yrange
3206 Valor por defecto: @code{auto}
3208 Cuando @code{yrange} vale @code{auto}, el rango de la coordenada @var{y}
3209 se calcula de forma automática.
3211 Si el usuario quiere especificar un intervalo para @var{y}, éste debe
3212 expresarse como una lista de Maxima, como en @code{yrange=[-2, 3]}.
3214 Puesto que ésta es una opción global, su posición dentro de la
3215 descripción de la escena no reviste importancia.
3217 Ejemplo:
3219 @example
3220 (%i1) load("draw")$
3221 (%i2) draw2d(yrange = [-2,3],
3222              explicit(x^2,x,-1,1),
3223              xrange = [-3,3])$
3224 @end example
3226 Véanse también @code{xrange} y @code{zrange}.
3227 @end defvr
3231 @defvr {Opción gráfica} yrange_secondary
3232 Valor por defecto: @code{auto}
3234 Cuando @code{yrange_secondary} vale @code{auto}, el rango del eje @var{y}
3235 secundario se calcula de forma automática.
3237 Si el usuario quiere especificar un intervalo para el eje @var{y} secundario, éste debe
3238 expresarse como una lista de Maxima, como en @code{yrange_secondary=[-2, 3]}.
3240 Puesto que ésta es una opción global, su posición dentro de la
3241 descripción de la escena no reviste importancia.
3243 Ejemplo:
3245 @example
3246 (%i1) load("draw")$
3247 (%i2) draw2d(
3248          explicit(sin(x),x,0,10),
3249          yaxis_secondary = true,
3250          ytics_secondary = true,
3251          yrange = [-3, 3],
3252          yrange_secondary = [-20, 20],
3253          color = blue,
3254          explicit(100*sin(x+0.1)+2,x,0,10)) $
3255 @end example
3257 Véanse también @code{xrange}, @code{yrange} y @code{zrange}.
3258 @end defvr
3263 @defvr {Opción gráfica} ytics
3264 Valor por defecto: @code{true}
3266 Esta opción gráfica controla la forma en la que se dibujarán las marcas
3267 del eje @var{y}.
3269 Véase @code{xtics} para una descripción completa.
3270 @end defvr
3275 @defvr {Opción gráfica} ytics_axis
3276 Valor por defecto: @code{false}
3278 Si @code{ytics_axis} vale @code{true}, las marcas y sus etiquetas se dibujan sobre
3279 el propio eje @var{y}, si vale @code{false} las marcas se colocan a lo largo del borde
3280 del gráfico.
3282 Puesto que ésta es una opción global, su posición dentro de la
3283 descripción de la escena no reviste importancia.
3284 @end defvr
3289 @defvr {Opción gráfica} ytics_rotate
3290 Valor por defecto: @code{false}
3292 Si @code{ytics_rotate} vale @code{true}, las marcas del eje @var{y} se giran 
3293 90 grados.
3295 Puesto que ésta es una opción global, su posición dentro de la
3296 descripción de la escena no reviste importancia.
3297 @end defvr
3302 @defvr {Opción gráfica} ytics_rotate_secondary
3303 Valor por defecto: @code{false}
3305 Si @code{ytics_rotate_secondary} vale @code{true}, las marcas del eje @var{y} 
3306 secundario se giran 90 grados.
3308 Puesto que ésta es una opción global, su posición dentro de la
3309 descripción de la escena no reviste importancia.
3310 @end defvr
3315 @defvr {Opción gráfica} ytics_secondary
3316 Valor por defecto: @code{auto}
3318 Esta opción gráfica controla la forma en la que se dibujarán las marcas
3319 del eje @var{y} secundario.
3321 Véase @code{xtics} para una descripción completa.
3322 @end defvr
3327 @defvr {Opción gráfica} ytics_secondary_axis
3328 Valor por defecto: @code{false}
3330 Si @code{ytics_secondary_axis} vale @code{true}, las marcas y sus etiquetas se dibujan sobre
3331 el propio eje @var{y} secundario, si vale @code{false} las marcas se colocan a lo largo del borde
3332 del gráfico.
3334 Puesto que ésta es una opción global, su posición dentro de la
3335 descripción de la escena no reviste importancia.
3336 @end defvr
3341 @defvr {Opción gráfica} yv_grid
3342 Valor por defecto: 30
3344 @code{yv_grid} es el número de coordenadas de la segunda variable
3345 (@code{y} en superficies explcítas y @code{v} en las
3346 paramétricas) para formar la rejilla de puntos muestrales.
3348 Esta opción afecta a los siguientes objetos gráficos:
3349 @itemize @bullet
3350 @item
3351 @code{gr3d}: @code{explicit} y @code{parametric_surface}.
3352 @end itemize
3354 Ejemplo:
3356 @example
3357 (%i1) load("draw")$
3358 (%i2) draw3d(xu_grid = 10,
3359              yv_grid = 50,
3360              explicit(x^2+y^2,x,-3,3,y,-3,3) )$
3361 @end example
3363 Véase también @code{xu_grid}.
3364 @end defvr
3369 @defvr {Opción gráfica} z_voxel
3370 Valor por defecto: 10
3372 @code{z_voxel} es el número de voxels en la dirección z a utilizar
3373 por el algoritmo @i{marching cubes} implementado por el objeto 
3374 @code{implicit} tridimensional.
3375 @end defvr
3380 @defvr {Opción gráfica} zaxis
3381 Valor por defecto: @code{false}
3383 Si @code{zaxis} vale @code{true}, se dibujará el eje @var{z} en
3384 escenas 3D. Esta opción no tiene efecto alguno en escenas 2D.
3386 Puesto que ésta es una opción global, su posición dentro de la
3387 descripción de la escena no reviste importancia.
3389 Ejemplo:
3391 @example
3392 (%i1) load("draw")$
3393 (%i2) draw3d(explicit(x^2+y^2,x,-1,1,y,-1,1),
3394              zaxis       = true,
3395              zaxis_type  = solid,
3396              zaxis_color = blue)$
3397 @end example
3399 Véanse también @code{zaxis_width}, @code{zaxis_type} y @code{zaxis_color}.
3400 @end defvr
3406 @defvr {Opción gráfica} zaxis_color
3407 Valor por defecto: @code{"black"}
3409 @code{zaxis_color} especifica el color para el eje @var{z}. Véase
3410 @code{color} para ver cómo se definen los colores.
3411 Esta opción no tiene efecto alguno en escenas 2D.
3413 Puesto que ésta es una opción global, su posición dentro de la
3414 descripción de la escena no reviste importancia.
3416 Ejemplo:
3418 @example
3419 (%i1) load("draw")$
3420 (%i2) draw3d(explicit(x^2+y^2,x,-1,1,y,-1,1),
3421              zaxis       = true,
3422              zaxis_type  = solid,
3423              zaxis_color = red)$
3424 @end example
3426 Véanse también @code{zaxis}, @code{zaxis_width} y @code{zaxis_type}.
3427 @end defvr
3432 @defvr {Opción gráfica} zaxis_type
3433 Valor por defecto: @code{dots}
3435 @code{zaxis_type} indica cómo se debe dibujar el eje @var{z}; 
3436 valores admisibles son @code{solid} y @code{dots}.
3437 Esta opción no tiene efecto alguno en escenas 2D.
3439 Puesto que ésta es una opción global, su posición dentro de la
3440 descripción de la escena no reviste importancia.
3442 Ejemplo:
3444 @example
3445 (%i1) load("draw")$
3446 (%i2) draw3d(explicit(x^2+y^2,x,-1,1,y,-1,1),
3447              zaxis       = true,
3448              zaxis_type  = solid)$
3449 @end example
3451 Véanse también @code{zaxis}, @code{zaxis_width} y @code{zaxis_color}.
3452 @end defvr
3458 @defvr {Opción gráfica} zaxis_width
3459 Valor por defecto: 1
3461 @code{zaxis_width} es el ancho del eje @var{z}.
3462 Su valor debe ser un número positivo. Esta opción no tiene efecto alguno en escenas 2D.
3464 Puesto que ésta es una opción global, su posición dentro de la
3465 descripción de la escena no reviste importancia.
3467 Ejemplo:
3469 @example
3470 (%i1) load("draw")$
3471 (%i2) draw3d(explicit(x^2+y^2,x,-1,1,y,-1,1),
3472              zaxis       = true,
3473              zaxis_type  = solid,
3474              zaxis_width = 3)$
3475 @end example
3477 Véanse también @code{zaxis}, @code{zaxis_type} y @code{zaxis_color}.
3478 @end defvr
3484 @defvr {Opción gráfica} zlabel
3485 Valor por defecto: @code{""}
3487 La opción @code{zlabel} almacena una cadena con la
3488 etiqueta del eje @var{z}. Por defecto, el eje tiene etiqueta @code{"z"}.
3490 Puesto que ésta es una opción global, su posición dentro de la
3491 descripción de la escena no reviste importancia.
3493 Ejemplo:
3495 @example
3496 (%i1) load("draw")$
3497 (%i2) draw3d(zlabel = "Z variable",
3498              ylabel = "Y variable",
3499              explicit(sin(x^2+y^2),x,-2,2,y,-2,2),
3500              xlabel = "X variable" )$
3501 @end example
3503 Véanse también @code{xlabel} y @code{ylabel}.
3504 @end defvr
3510 @defvr {Opción gráfica} zrange
3511 Valor por defecto: @code{auto}
3513 Cuando @code{zrange} vale @code{auto}, el rango de la coordenada @var{z}
3514 se calcula de forma automática.
3516 Si el usuario quiere especificar un intervalo para @var{z}, éste debe
3517 expresarse como una lista de Maxima, como en @code{zrange=[-2, 3]}.
3519 Puesto que ésta es una opción global, su posición dentro de la
3520 descripción de la escena no reviste importancia.
3522 Ejemplo:
3524 @example
3525 (%i1) load("draw")$
3526 (%i2) draw3d(yrange = [-3,3],
3527              zrange = [-2,5],
3528              explicit(x^2+y^2,x,-1,1,y,-1,1),
3529              xrange = [-3,3])$
3530 @end example
3532 Véanse también @code{xrange} y @code{yrange}.
3533 @end defvr
3538 @defvr {Opción gráfica} ztics
3539 Valor por defecto: @code{true}
3541 Esta opción gráfica controla la forma en la que se dibujarán las marcas
3542 del eje @var{z}.
3544 Véase @code{xtics} para una descripción completa.
3545 @end defvr
3551 @defvr {Opción gráfica} ztics_axis
3552 Valor por defecto: @code{false}
3554 Si @code{ztics_axis} vale @code{true}, las marcas y sus etiquetas se dibujan sobre
3555 el propio eje @var{z}, si vale @code{false} las marcas se colocan a lo largo del borde
3556 del gráfico.
3558 Puesto que ésta es una opción global, su posición dentro de la
3559 descripción de la escena no reviste importancia.
3560 @end defvr
3566 @defvr {Opción gráfica} ztics_rotate
3567 Valor por defecto: @code{false}
3569 Si @code{ztics_rotate} vale @code{true}, las marcas del eje @var{z} se giran 
3570 90 grados.
3572 Puesto que ésta es una opción global, su posición dentro de la
3573 descripción de la escena no reviste importancia.
3574 @end defvr
3579 @subsection Objetos gráficos
3583 @deffn  {Objeto gráfico} bars ([@var{x1},@var{h1},@var{w1}], [@var{x2},@var{h2},@var{w2}, ...])
3584 Dibuja barras verticales en 2D.
3586 @b{2D}
3588 @code{bars ([@var{x1},@var{h1},@var{w1}], [@var{x2},@var{h2},@var{w2}, ...])} 
3589 dibuja barras centradas en los valores @var{x1}, @var{x2}, ... de alturas @var{h1}, @var{h2}, ...
3590 y anchos @var{w1}, @var{w2}, ...
3592 Este objeto se ve afectado por las siguientes @i{opciones gráficas}: @code{key}, 
3593 @code{fill_color}, @code{fill_density} y @code{line_width}.
3595 Ejemplo:
3597 @example
3598 (%i1) load("draw")$
3599 (%i2) draw2d(
3600        key          = "Grupo A",
3601        fill_color   = blue,
3602        fill_density = 0.2,
3603        bars([0.8,5,0.4],[1.8,7,0.4],[2.8,-4,0.4]),
3604        key          = "Grupo B",
3605        fill_color   = red,
3606        fill_density = 0.6,
3607        line_width   = 4,
3608        bars([1.2,4,0.4],[2.2,-2,0.4],[3.2,5,0.4]),
3609        xaxis = true);
3610 @end example
3611 @end deffn
3618 @deffn  {Objeto gráfico} cylindrical (@var{radius},@var{z},@var{minz},@var{maxz},@var{azi},@var{minazi},@var{maxazi})
3619 Dibuja funciones 3D definidas en coordenadas cilíndricas.
3621 @b{3D}
3623 @code{cylindrical (@var{radius},@var{z},@var{minz},@var{maxz},@var{azi},@var{minazi},@var{maxazi})}
3624 dibuja la función @code{@var{radius}(@var{z},@var{azi})} definida en coordenadas cilíndricas, con la variable
3625 @var{z} tomando valores desde @var{minz} hasta @var{maxz} y el @i{azimut} @var{azi} tomando valores desde
3626 @var{minazi} hasta @var{maxazi}.
3628 Este objeto se ve afectado por las siguientes @i{opciones gráficas}: @code{xu_grid}, 
3629 @code{yv_grid}, @code{line_type}, @code{key}, @code{wired_surface}, @code{enhanced3d} y @code{color}.
3631 Ejemplo:
3633 @example
3634 (%i1) load("draw")$
3635 (%i2) draw3d(cylindrical(1,z,-2,2,az,0,2*%pi))$
3636 @end example
3637 @end deffn
3642 @deffn  {Objeto gráfico} elevation_grid (@var{mat},@var{x0},@var{y0},@var{width},@var{height})
3643 Dibuja la matriz @var{mat} en 3D. Los valores @var{z} se toman de @var{mat},
3644 las abscisas van desde @var{x0} hasta @math{@var{x0} + @var{width}}
3645 y las ordenadas desde @var{y0} hasta @math{@var{y0} + @var{height}}. El elemento @math{a(1,1)}
3646 se proyecta sobre el punto @math{(x0,y0+height)}, @math{a(1,n)} sobre @math{(x0+width,y0+height)},
3647 @math{a(m,1)} sobre @math{(x0,y0)} y @math{a(m,n)} sobre @math{(x0+width,y0)}.
3649 Este objeto se ve afectado por las siguientes @i{opciones gráficas}: @code{line_type},
3650 @code{line_width}, @code{key}, @code{wired_surface}, @code{enhanced3d} y @code{color}.
3652 En versiones antiguas de Maxima, @code{elevation_grid} se llamaba @code{mesh}.
3653 Véase también @code{mesh}.
3655 Ejemplo:
3657 @example
3658 (%i1) load("draw")$
3659 (%i2) m: apply(
3660             matrix,
3661             makelist(makelist(random(10.0),k,1,30),i,1,20)) $
3662 (%i3) draw3d(
3663          color = blue,
3664          elevation_grid(m,0,0,3,2),
3665          xlabel = "x",
3666          ylabel = "y",
3667          surface_hide = true);
3668 @end example
3670 @end deffn
3676 @deffn  {Objeto gráfico} ellipse (@var{xc}, @var{yc}, @var{a}, @var{b}, @var{ang1}, @var{ang2})
3677 Dibuja elipses y círculos en 2D.
3680 @b{2D}
3682 @code{ellipse (@var{xc}, @var{yc}, @var{a}, @var{b}, @var{ang1}, @var{ang2})}
3683 dibuja una elipse de centro @code{[@var{xc}, @var{yc}]} con semiejes horizontal y vertical
3684 @var{a} y @var{b}, respectivamente, comenzando en el ángulo @var{ang1} y trazando un arco
3685 de amplitud igual al ángulo @var{ang2}.
3687 Este objeto se ve afectado por las siguientes @i{opciones gráficas}: @code{nticks}, 
3688 @code{transparent}, @code{fill_color}, @code{border}, @code{line_width}, 
3689 @code{line_type}, @code{key} y @code{color}.
3691 Ejemplo:
3693 @example
3694 (%i1) load("draw")$
3695 (%i2) draw2d(transparent = false,
3696              fill_color  = red,
3697              color       = gray30,
3698              transparent = false,
3699              line_width  = 5,
3700              ellipse(0,6,3,2,270,-270),
3701              /* center (x,y), a, b, start & end in degrees */
3702              transparent = true,
3703              color       = blue,
3704              line_width  = 3,
3705              ellipse(2.5,6,2,3,30,-90),
3706              xrange      = [-3,6],
3707              yrange      = [2,9] )$
3708 @end example
3709 @end deffn
3713 @deffn  {Objeto gráfico} errors ([@var{x1},@var{x2},...], [@var{y1},@var{y2},...])
3714 Dibuja puntos con barras de error asociadas horizontales, verticales o de
3715 ambos tipos, según sea el valor de la opción @code{error_type}.
3717 @b{2D}
3719 Si @code{error_type=x}, los argumentos a @code{errors} deben ser de la forma 
3720 @code{[x,y,xdelta]} o @code{[x,y,xlow,xhigh]}. Si @code{error_type=y}, 
3721 los argumentos deben ser del tipo @code{[x,y,ydelta]} o @code{[x,y,ylow,yhigh]}.
3722 Si @code{error_type=xy} o @code{error_type=boxes}, los argumentos deben ser de la
3723 forma @code{[x,y,xdelta,ydelta]} o @code{[x,y,xlow,xhigh,ylow,yhigh]}.
3725 Véase también @code{error_type}.
3727 Este objeto se ve afectado por las siguientes @i{opciones gráficas}: @code{error_type}, 
3728 @code{points_joined}, @code{line_width}, @code{key}, @code{line_type}, 
3729 @code{color}, @code{fill_density}, @code{xaxis_secondary} y @code{yaxis_secondary}.
3731 La opción @code{fill_density} solo es relevante cuando @code{error_type=boxes}.
3733 Ejemplos:
3735 Barras de error horizontales.
3737 @example
3738 (%i1) load("draw")$
3739 (%i2) draw2d(
3740         error_type = y,
3741         errors([[1,2,1], [3,5,3], [10,3,1], [17,6,2]]))$
3742 @end example
3744 Barras de error horizontales y verticales.
3746 @example
3747 (%i1) load("draw")$
3748 (%i2) draw2d(
3749         error_type = xy,
3750         points_joined = true,
3751         color = blue,
3752         errors([[1,2,1,2], [3,5,2,1], [10,3,1,1], [17,6,1/2,2]])); 
3753 @end example
3755 @end deffn
3759 @deffn  {Objeto gráfico} explicit (@var{fcn},@var{var},@var{minval},@var{maxval})
3760 @deffnx {Objeto gráfico} explicit (@var{fcn},@var{var1},@var{minval1},@var{maxval1},@var{var2},@var{minval2},@var{maxval2})
3761 Dibuja funciones explícitas en 2D y 3D.
3763 @b{2D}
3765 @code{explicit (@var{fcn},@var{var},@var{minval},@var{maxval})} dibuja la función explícita @var{fcn},
3766 con la variable @var{var} tomando valores desde @var{minval} hasta @var{maxval}.
3768 Este objeto se ve afectado por las siguientes @i{opciones gráficas}: @code{nticks}, 
3769 @code{adapt_depth}, @code{draw_realpart}, @code{line_width}, @code{line_type}, @code{key}, 
3770 @code{filled_func}, @code{fill_color} y @code{color}.
3772 Ejemplo:
3774 @example
3775 (%i1) load("draw")$
3776 (%i2) draw2d(line_width = 3,
3777              color      = blue,
3778              explicit(x^2,x,-3,3) )$
3779 (%i3) draw2d(fill_color  = brown,
3780              filled_func = true,
3781              explicit(x^2,x,-3,3) )$
3782 @end example
3784 @b{3D}
3786 @code{explicit (@var{fcn},@var{var1},@var{minval1},@var{maxval1},@var{var2},@var{minval2},@var{maxval2})}
3787 dibuja la función explícita @var{fcn}, con la variable 
3788 @code{var1} tomando valores desde @var{minval1} hasta @var{maxval1} y 
3789 la variable @var{var2} tomando valores desde @var{minval2} hasta @var{maxval2}.
3791 Este objeto se ve afectado por las siguientes @i{opciones gráficas}: @code{draw_realpart}, @code{xu_grid}, 
3792 @code{yv_grid}, @code{line_type}, @code{line_width}, @code{key}, @code{wired_surface}, @code{enhanced3d}
3793 y @code{color}.
3795 Ejemplo:
3797 @example
3798 (%i1) load("draw")$
3799 (%i2) draw3d(key   = "Gauss",
3800              color = "#a02c00",
3801              explicit(20*exp(-x^2-y^2)-10,x,-3,3,y,-3,3),
3802              yv_grid     = 10,
3803              color = blue,
3804              key   = "Plane",
3805              explicit(x+y,x,-5,5,y,-5,5),
3806              surface_hide = true)$
3807 @end example
3809 Véase también @code{filled_func} para el relleno de curvas.
3810 @end deffn
3815 @deffn  {Objeto gráfico} image (@var{im},@var{x0},@var{y0},@var{width},@var{height})
3816 Reproduce una imagen en 2D.
3818 @b{2D}
3820 @code{image (@var{im},@var{x0},@var{y0},@var{width},@var{height})}:
3821 dibuja la imagen @var{im} en la región rectangular desde el vértice @code{(@var{x0},@var{y0})}
3822 hasta el @code{(x0+@var{width},y0+@var{height})} del plano real. El argumento @var{im} debe ser una
3823 matriz de números reales, una matriz de vectores de longitud tres o un objeto
3824 de tipo @code{picture}.
3826 Si @var{im} es una matriz de números reales, los valores de los
3827 píxeles se interpretan según indique la opción
3828 gráfica @code{palette}, que es un vector de longitud tres con sus componentes tomando
3829 valores enteros en el rango desde -36 a +36; cada valor es un 
3830 índice para seleccionar una fórmula que transforma los niveles
3831 numéricos en las componentes cromáticas rojo, verde y azul:
3832 @example
3833  0: 0               1: 0.5           2: 1
3834  3: x               4: x^2           5: x^3
3835  6: x^4             7: sqrt(x)       8: sqrt(sqrt(x))
3836  9: sin(90x)       10: cos(90x)     11: |x-0.5|
3837 12: (2x-1)^2       13: sin(180x)    14: |cos(180x)|
3838 15: sin(360x)      16: cos(360x)    17: |sin(360x)|
3839 18: |cos(360x)|    19: |sin(720x)|  20: |cos(720x)|
3840 21: 3x             22: 3x-1         23: 3x-2
3841 24: |3x-1|         25: |3x-2|       26: (3x-1)/2
3842 27: (3x-2)/2       28: |(3x-1)/2|   29: |(3x-2)/2|
3843 30: x/0.32-0.78125 31: 2*x-0.84
3844 32: 4x;1;-2x+1.84;x/0.08-11.5
3845 33: |2*x - 0.5|    34: 2*x          35: 2*x - 0.5
3846 36: 2*x - 1
3847 @end example
3848 los números negativos se interpretan como colores invertidos
3849 de las componentes cromáticas.
3851 @code{palette = gray} y @code{palette = color} son atajos para
3852 @code{palette = [3,3,3]} y @code{palette = [7,5,15]}, respectivamente.
3854 Si @var{im} es una matriz de vectores de longitud tres, éstos se
3855 interpretarán como las componentes cromáticas rojo, verde y azul.
3857 Ejemplos:
3859 Si @var{im} es una matriz de números reales, los valores de los
3860 píxeles se interpretan según indique la opción
3861 gráfica @code{palette}.
3862 @example
3863 (%i1) load("draw")$
3864 (%i2) im: apply(
3865            'matrix,
3866             makelist(makelist(random(200),i,1,30),i,1,30))$
3867 (%i3) /* palette = color, default */
3868       draw2d(image(im,0,0,30,30))$
3869 (%i4) draw2d(palette = gray, image(im,0,0,30,30))$
3870 (%i5) draw2d(palette = [15,20,-4],
3871              colorbox=false,
3872              image(im,0,0,30,30))$
3873 @end example
3875 Véase también @code{colorbox}.
3877 Si @var{im} es una matriz de vectores de longitud tres, éstos se
3878 interpretarán como las componentes cromáticas rojo, verde y azul.
3879 @example
3880 (%i1) load("draw")$
3881 (%i2) im: apply(
3882             'matrix,
3883              makelist(
3884                makelist([random(300),
3885                          random(300),
3886                          random(300)],i,1,30),i,1,30))$
3887 (%i3) draw2d(image(im,0,0,30,30))$
3888 @end example
3890 El paquete @code{draw} carga automáticamente el paquete @code{picture}. 
3891 En este ejemplo, una imagen de niveles se define a mano, reproduciéndola
3892 a continuación.
3893 @example
3894 (%i1) load("draw")$
3895 (%i2) im: make_level_picture([45,87,2,134,204,16],3,2);
3896 (%o2)       picture(level, 3, 2, @{Array:  #(45 87 2 134 204 16)@})
3897 (%i3) /* default color palette */
3898       draw2d(image(im,0,0,30,30))$
3899 (%i4) /* gray palette */
3900       draw2d(palette = gray,
3901              image(im,0,0,30,30))$
3902 @end example
3904 Se lee un fichero xpm y se reproduce.
3905 @example
3906 (%i1) load("draw")$
3907 (%i2) im: read_xpm("myfile.xpm")$
3908 (%i3) draw2d(image(im,0,0,10,7))$
3909 @end example
3911 Véanse también @code{make_level_picture}, @code{make_rgb_picture} y @code{read_xpm}.
3913 En @url{http://www.telefonica.net/web2/biomates/maxima/gpdraw/image}
3914 se encuentran ejemplos más elaborados.
3915 @end deffn
3921 @deffn  {Objeto gráfico} implicit (@var{fcn},@var{x},@var{xmin},@var{xmax},@var{y},@var{ymin},@var{ymax})
3922 @deffnx {Objeto gráfico} implicit (@var{fcn},@var{x},@var{xmin},@var{xmax},@var{y},@var{ymin},@var{ymax},@var{z},@var{zmin},@var{zmax})
3923 Dibuja funciones implícitas en 2D y 3D.
3925 @b{2D}
3927 @code{implicit (@var{fcn},@var{x},@var{xmin},@var{xmax},@var{y},@var{ymin},@var{ymax})}
3928 dibuja la función implícita @var{fcn}, con la variable
3929 @code{x} tomando valores desde @var{xmin} hasta @var{xmax},
3930 y la variable @var{y} tomando valores desde @var{ymin} hasta @var{ymax}.
3932 Este objeto se ve afectado por las siguientes @i{opciones gráficas}: @code{ip_grid}, 
3933 @code{ip_grid_in}, @code{line_width}, @code{line_type}, @code{key} y @code{color}.
3935 Ejemplo:
3937 @example
3938 (%i1) load("draw")$
3939 (%i2) draw2d(terminal  = eps,
3940              grid      = true,
3941              line_type = solid,
3942              key       = "y^2=x^3-2*x+1",
3943              implicit(y^2=x^3-2*x+1, x, -4,4, y, -4,4),
3944              line_type = dots,
3945              key       = "x^3+y^3 = 3*x*y^2-x-1",
3946              implicit(x^3+y^3 = 3*x*y^2-x-1, x,-4,4, y,-4,4),
3947              title     = "Two implicit functions" )$
3948 @end example
3950 @b{3D}
3952 @code{implicit (@var{fcn},@var{x},@var{xmin},@var{xmax}, @var{y},@var{ymin},@var{ymax}, @var{z},@var{zmin},@var{zmax})}
3953 dibuja la función implícita @var{fcn}, con la variable @var{x} 
3954 tomando valores desde @var{xmin} hasta @var{xmax}, la variable @var{y} tomando 
3955 valores desde @var{ymin} hasta @var{ymax} y la variable @var{z} tomando 
3956 valores desde @var{zmin} hasta @var{zmax}. Este objeto está programado con el 
3957 algoritmo @i{marching cubes}.
3959 Este objeto se ve afectado por las siguientes @i{opciones gráficas}: @code{x_voxel}, 
3960 @code{y_voxel}, @code{z_voxel}, @code{line_width}, @code{line_type}, @code{key}, 
3961 @code{wired_surface}, @code{enhanced3d} y @code{color}.
3963 Ejemplo:
3965 @example
3966 (%i1) load("draw")$
3967 (%i2) draw3d(
3968         color=blue,
3969         implicit((x^2+y^2+z^2-1)*(x^2+(y-1.5)^2+z^2-0.5)=0.015,
3970                  x,-1,1,y,-1.2,2.3,z,-1,1),
3971         surface_hide=true);
3972 @end example
3973 @end deffn
3979 @deffn  {Objeto gráfico} label ([@var{string},@var{x},@var{y}],...)
3980 @deffnx {Objeto gráfico} label ([@var{string},@var{x},@var{y},@var{z}],...)
3981 Escribe etiquetas en 2D y 3D.
3983 Las etiquetas coloreadas sólo trabajan con Gnuplot 4.3. Este es un fallo conocido del
3984 paquete @code{draw}.
3986 Este objeto se ve afectado por las siguientes @i{opciones gráficas}: @code{label_alignment}, 
3987 @code{label_orientation} y @code{color}.
3989 @b{2D}
3991 @code{label([@var{string},@var{x},@var{y}])} escribe la cadena de caracteres @var{string} 
3992 en el punto @code{[@var{x},@var{y}]}.
3994 Ejemplo:
3996 @example
3997 (%i1) load("draw")$
3998 (%i2) draw2d(yrange = [0.1,1.4],
3999              color = red,
4000              label(["Label in red",0,0.3]),
4001              color = "#0000ff",
4002              label(["Label in blue",0,0.6]),
4003              color = light_blue,
4004              label(["Label in light-blue",0,0.9],
4005                    ["Another light-blue",0,1.2])  )$
4006 @end example
4008 @b{3D}
4010 @code{label([@var{string},@var{x},@var{y},@var{z}])} escribe la cadena de caracteres @var{string}
4011 en el punto @code{[@var{x},@var{y},@var{z}]}.
4013 Ejemplo:
4015 @example
4016 (%i1) load("draw")$
4017 (%i2) draw3d(explicit(exp(sin(x)+cos(x^2)),x,-3,3,y,-3,3),
4018              color = red,
4019              label(["UP 1",-2,0,3], ["UP 2",1.5,0,4]),
4020              color = blue,
4021              label(["DOWN 1",2,0,-3]) )$
4022 @end example
4023 @end deffn
4027 @deffn  {Objeto gráfico} mesh (@var{fila_1},@var{fila_2},...)
4028 Dibuja un enrejado cuadrangular en 3D.
4030 @b{3D}
4032 El argumento @var{fila_i} es una lista de @var{n} puntos en 3D de la forma
4033 @code{[[x_i1,y_i1,z_i1], ...,[x_in,y_in,z_in]]}, siendo todas las filas de
4034 igual longitud. Todos estos puntos definen una superficie arbitraria en 3D.
4035 En cierto sentido, se trata de una generalización del objeto @code{elevation_grid}.
4037 Este objeto se ve afectado por las siguientes @i{opciones gráficas}: @code{line_type}, 
4038 @code{line_width}, @code{color}, @code{key}, @code{wired_surface}, @code{enhanced3d} y @code{transform}.
4040 Ejemplos:
4042 Un sencillo ejemplo.
4044 @example
4045 (%i1) load("draw")$
4046 (%i2) draw3d( 
4047          mesh([[1,1,3],   [7,3,1],[12,-2,4],[15,0,5]],
4048               [[2,7,8],   [4,3,1],[10,5,8], [12,7,1]],
4049               [[-2,11,10],[6,9,5],[6,15,1], [20,15,2]])) $
4050 @end example
4052 Dibujando un triángulo en 3D.
4054 @example
4055 (%i1) load("draw")$
4056 (%i2) draw3d(
4057         line_width = 2,
4058         mesh([[1,0,0],[0,1,0]],
4059              [[0,0,1],[0,0,1]])) $
4060 @end example
4062 Dos cuadriláteros.
4064 @example
4065 (%i1) load("draw")$
4066 (%i2) draw3d(
4067         surface_hide = true,
4068         line_width   = 3,
4069         color = red,
4070         mesh([[0,0,0], [0,1,0]],
4071              [[2,0,2], [2,2,2]]),
4072         color = blue,
4073         mesh([[0,0,2], [0,1,2]],
4074              [[2,0,4], [2,2,4]])) $
4075 @end example
4076 @end deffn
4080 @deffn  {Objeto gráfico} parametric (@var{xfun},@var{yfun},@var{par},@var{parmin},@var{parmax})
4081 @deffnx {Objeto gráfico} parametric (@var{xfun},@var{yfun},@var{zfun},@var{par},@var{parmin},@var{parmax})
4082 Dibuja funciones paramétricas en 2D y 3D.
4084 Este objeto se ve afectado por las siguientes @i{opciones gráficas}: @code{nticks}, 
4085 @code{line_width}, @code{line_type}, @code{key}, @code{color} y @code{enhanced3d}.
4087 @b{2D}
4089 @code{parametric (@var{xfun},@var{yfun},@var{par},@var{parmin},@var{parmax})} dibuja la función paramétrica 
4090 @code{[@var{xfun},@var{yfun}]}, con el parámetro @var{par} tomando valores desde 
4091 @var{parmin} hasta @var{parmax}.
4093 Ejemplo:
4095 @example
4096 (%i1) load("draw")$
4097 (%i2) draw2d(explicit(exp(x),x,-1,3),
4098              color = red,
4099              key   = "This is the parametric one!!",
4100              parametric(2*cos(rrr),rrr^2,rrr,0,2*%pi))$
4101 @end example
4103 @b{3D}
4105 @code{parametric (@var{xfun},@var{yfun},@var{zfun},@var{par},@var{parmin},@var{parmax})} 
4106 dibuja la curva paramétrica @code{[@var{xfun},@var{yfun},@var{zfun}]}, con el parámetro
4107 @var{par} tomando valores desde @var{parmin} hasta @var{parmax}.
4109 Ejemplo:
4111 @example
4112 (%i1) load("draw")$
4113 (%i2) draw3d(explicit(exp(sin(x)+cos(x^2)),x,-3,3,y,-3,3),
4114              color = royalblue,
4115              parametric(cos(5*u)^2,sin(7*u),u-2,u,0,2),
4116              color      = turquoise,
4117              line_width = 2,
4118              parametric(t^2,sin(t),2+t,t,0,2),
4119              surface_hide = true,
4120              title = "Surface & curves" )$
4121 @end example
4122 @end deffn
4128 @deffn  {Objeto gráfico} parametric_surface (@var{xfun},@var{yfun},@var{zfun},@var{par1},@var{par1min},@var{par1max},@var{par2},@var{par2min},@var{par2max})
4129 Dibuja superficies paramétricas en 3D.
4131 @b{3D}
4133 @code{parametric_surface (@var{xfun},@var{yfun},@var{zfun},@var{par1},@var{par1min},@var{par1max},@var{par2},@var{par2min},@var{par2max})}
4134 dibuja la superficie paramétrica @code{[@var{xfun},@var{yfun},@var{zfun}]}, 
4135 con el parámetro @var{par1} tomando valores desde @var{par1min} hasta @var{par1max}
4136 y el parámetro @var{par2} tomando valores desde @var{par2min} hasta @var{par2max}.
4138 Este objeto se ve afectado por las siguientes @i{opciones gráficas}: @code{draw_realpart}, @code{xu_grid}, 
4139 @code{yv_grid}, @code{line_type}, @code{line_width}, @code{key}, @code{wired_surface}, @code{enhanced3d}
4140 y @code{color}.
4142 Ejemplo:
4144 @example
4145 (%i1) load("draw")$
4146 (%i2) draw3d(title          = "Sea shell",
4147              xu_grid        = 100,
4148              yv_grid        = 25,
4149              view           = [100,20],
4150              surface_hide   = true,
4151              parametric_surface(0.5*u*cos(u)*(cos(v)+1),
4152                            0.5*u*sin(u)*(cos(v)+1),
4153                            u*sin(v) - ((u+3)/8*%pi)^2 - 20,
4154                            u, 0, 13*%pi, v, -%pi, %pi) )$
4155 @end example
4156 @end deffn
4161 @deffn  {Objeto gráfico} points ([[@var{x1},@var{y1}], [@var{x2},@var{y2}],...])
4162 @deffnx {Objeto gráfico} points ([@var{x1},@var{x2},...], [@var{y1},@var{y2},...])
4163 @deffnx {Objeto gráfico} points ([@var{y1},@var{y2},...])
4164 @deffnx {Objeto gráfico} points ([[@var{x1},@var{y1},@var{z1}], [@var{x2},@var{y2},@var{z2}],...])
4165 @deffnx {Objeto gráfico} points ([@var{x1},@var{x2},...], [@var{y1},@var{y2},...], [@var{z1},@var{z2},...])
4166 @deffnx {Objeto gráfico} points (@var{matrix})
4167 @deffnx {Objeto gráfico} points (@var{1d_y_array})
4168 @deffnx {Objeto gráfico} points (@var{1d_x_array}, @var{1d_y_array})
4169 @deffnx {Objeto gráfico} points (@var{1d_x_array}, @var{1d_y_array}, @var{1d_z_array})
4170 @deffnx {Objeto gráfico} points (@var{2d_xy_array})
4171 @deffnx {Objeto gráfico} points (@var{2d_xyz_array})
4173 Dibuja puntos en 2D y 3D.
4175 Este objeto se ve afectado por las siguientes @i{opciones gráficas}: @code{point_size}, 
4176 @code{point_type}, @code{points_joined}, @code{line_width}, @code{key},
4177 @code{line_type} y @code{color}. En modo 3D también se ve afectado por @code{enhanced3d}.
4179 @b{2D}
4181 @code{points ([[@var{x1},@var{y1}], [@var{x2},@var{y2}],...])} o 
4182 @code{points ([@var{x1},@var{x2},...], [@var{y1},@var{y2},...])}
4183 dibuja los puntos @code{[@var{x1},@var{y1}]}, @code{[@var{x2},@var{y2}]}, etc. Si no se dan las abscisas,
4184 éstas se asignan automáticamente a enteros positivos consecutivos, de forma que
4185 @code{points([@var{y1},@var{y2},...])} dibuja los puntos @code{[1,@var{y1}]}, @code{[2,@var{y2}]}, etc.
4186 Si @var{matrix} es una matriz de dos columnas o de dos filas, @code{points (@var{matrix})}
4187 dibuja los puntos asociados.
4189 Si @var{1d_y_array} es un array lisp de números en 1D, @code{points (@var{1d_y_array})}
4190 los dibujará asignando las abscisas a números enteros consecutivos.
4191 @code{points (@var{1d_x_array}, @var{1d_y_array})} dibuja los puntos cuyas coordenadas
4192 se toman de los dos arrays pasados como argumentos. Si @var{2d_xy_array} es un array lisp
4193 2D de dos filas, o de dos columnas, @code{points (@var{2d_xy_array})} dibuja los correspondientes
4194 puntos del plano.
4196 Ejemplos:
4198 Dos tipos de argumentos para @code{points}, una lista de pares ordenados
4199 y dos listas con las coordenadas separadas.
4200 @example
4201 (%i1) load("draw")$
4202 (%i2) draw2d(
4203         key = "Small points",
4204         points(makelist([random(20),random(50)],k,1,10)),
4205         point_type    = circle,
4206         point_size    = 3,
4207         points_joined = true,
4208         key           = "Great points",
4209         points(makelist(k,k,1,20),makelist(random(30),k,1,20)),
4210         point_type    = filled_down_triangle,
4211         key           = "Automatic abscissas",
4212         color         = red,
4213         points([2,12,8]))$
4214 @end example
4216 Dibujando impulsos.
4217 @example
4218 (%i1) load("draw")$
4219 (%i2) draw2d(
4220         points_joined = impulses,
4221         line_width    = 2,
4222         color         = red,
4223         points(makelist([random(20),random(50)],k,1,10)))$
4224 @end example
4226 Array con ordenadas.
4227 @example
4228 (%i1) load("draw")$
4229 (%i2) a: make_array (flonum, 100) $
4230 (%i3) for i:0 thru 99 do a[i]: random(1.0) $
4231 (%i4) draw2d(points(a)) $
4232 @end example
4234 Dos arrays con coordenadas separadas.
4235 @example
4236 (%i1) load("draw")$
4237 (%i2) x: make_array (flonum, 100) $
4238 (%i3) y: make_array (fixnum, 100) $
4239 (%i4) for i:0 thru 99 do (
4240         x[i]: float(i/100),
4241         y[i]: random(10) ) $
4242 (%i5) draw2d(points(x, y)) $
4243 @end example
4245 Un array 2D de dos columnas.
4246 @example
4247 (%i1) load("draw")$
4248 (%i2) xy: make_array(flonum, 100, 2) $
4249 (%i3) for i:0 thru 99 do (
4250         xy[i, 0]: float(i/100),
4251         xy[i, 1]: random(10) ) $
4252 (%i4) draw2d(points(xy)) $
4253 @end example
4255 Dibujando un array rellenado con la función @code{read_array}.
4256 @example
4257 (%i1) load("draw")$
4258 (%i2) a: make_array(flonum,100) $
4259 (%i3) read_array (file_search ("pidigits.data"), a) $
4260 (%i4) draw2d(points(a)) $
4261 @end example
4263 @b{3D}
4265 @code{points ([[@var{x1},@var{y1},@var{z1}], [@var{x2},@var{y2},@var{z2}],...])} o 
4266 @code{points ([@var{x1},@var{x2},...], [@var{y1},@var{y2},...], [@var{z1},@var{z2},...])}
4267 dibuja los puntos @code{[@var{x1},@var{y1},@var{z1}]}, @code{[@var{x2},@var{y2},@var{z2}]}, etc.
4268 Si @var{matrix} es una matriz de tres columnas o de tres filas, @code{points (@var{matrix})}
4269 dibuja los puntos asociados. Si @var{matrix} es una matriz columna o fila, las abscisas 
4270 se asignan automáticamente. 
4272 En caso de que los argumentos sean arrays lisp, @code{points (@var{1d_x_array}, @var{1d_y_array}, @var{1d_z_array})}
4273 toma las coordenadas de los tres arrays unidimensionales. Si @var{2d_xyz_array} es un array 2D de tres columnas,
4274 o de tres filas, entonces @code{points (@var{2d_xyz_array})} dibuja los puntos correspondientes.
4276 Ejemplos:
4278 Una muestra tridimensional,
4279 @example
4280 (%i1) load("draw")$
4281 (%i2) load ("numericalio")$
4282 (%i3) s2 : read_matrix (file_search ("wind.data"))$
4283 (%i4) draw3d(title = "Daily average wind speeds",
4284              point_size = 2,
4285              points(args(submatrix (s2, 4, 5))) )$
4286 @end example
4288 Dos muestras tridimensionales,
4289 @example
4290 (%i1) load("draw")$
4291 (%i2) load ("numericalio")$
4292 (%i3) s2 : read_matrix (file_search ("wind.data"))$
4293 (%i4) draw3d(
4294          title = "Daily average wind speeds. Two data sets",
4295          point_size = 2,
4296          key        = "Sample from stations 1, 2 and 3",
4297          points(args(submatrix (s2, 4, 5))),
4298          point_type = 4,
4299          key        = "Sample from stations 1, 4 and 5",
4300          points(args(submatrix (s2, 2, 3))) )$
4301 @end example
4303 Arrays unidimensionales,
4304 @example
4305 (%i1) load("draw")$
4306 (%i2) x: make_array (fixnum, 10) $
4307 (%i3) y: make_array (fixnum, 10) $
4308 (%i4) z: make_array (fixnum, 10) $
4309 (%i5) for i:0 thru 9 do (
4310         x[i]: random(10),
4311         y[i]: random(10),
4312         z[i]: random(10) ) $
4313 (%i6) draw3d(points(x,y,z)) $
4314 @end example
4316 Array bidimensional coloreado,
4317 @example
4318 (%i1) load("draw")$
4319 (%i2) xyz: make_array(fixnum, 10, 3) $
4320 (%i3) for i:0 thru 9 do (
4321         xyz[i, 0]: random(10),
4322         xyz[i, 1]: random(10),
4323         xyz[i, 2]: random(10) ) $
4324 (%i4) draw3d(
4325          enhanced3d = true,
4326          points_joined = true,
4327          points(xyz)) $
4328 @end example
4330 Números de colores especificados explícitamente
4331 por el usuario.
4332 @example
4333 (%i1) load("draw")$
4334 (%i2) pts: makelist([t,t^2,cos(t)], t, 0, 15)$
4335 (%i3) col_num: makelist(k, k, 1, length(pts))$
4336 (%i4) draw3d(
4337         enhanced3d = ['part(col_num,k),k],
4338         point_size = 3,
4339         point_type = filled_circle,
4340         points(pts))$
4341 @end example
4342 @end deffn
4347 @deffn  {Objeto gráfico} polar (@var{radius},@var{ang},@var{minang},@var{maxang})
4348 Dibuja funciones 2D definidas en coordenadas polares.
4350 @b{2D}
4352 @code{polar (@var{radius},@var{ang},@var{minang},@var{maxang})} dibuja la función
4353 @code{@var{radius}(@var{ang})} definida en coordenadas polares, con la variable 
4354 @var{ang} tomando valores desde @var{minang} hasta @var{maxang}.
4356 Este objeto se ve afectado por las siguientes @i{opciones gráficas}: @code{nticks}, 
4357 @code{line_width}, @code{line_type}, @code{key} y @code{color}.
4359 Ejemplo:
4361 @example
4362 (%i1) load("draw")$
4363 (%i2) draw2d(user_preamble = "set grid polar",
4364              nticks        = 200,
4365              xrange        = [-5,5],
4366              yrange        = [-5,5],
4367              color         = blue,
4368              line_width    = 3,
4369              title         = "Hyperbolic Spiral",
4370              polar(10/theta,theta,1,10*%pi) )$
4371 @end example
4372 @end deffn
4378 @deffn  {Objeto gráfico} polygon ([[@var{x1},@var{y1}], [@var{x2},@var{y2}],...])
4379 @deffnx {Objeto gráfico} polygon ([@var{x1},@var{x2},...], [@var{y1},@var{y2},...])
4380 Dibuja polígonos en 2D.
4382 @b{2D}
4384 @code{polygon ([[@var{x1},@var{y1}], [@var{x2},@var{y2}],...])} o 
4385 @code{polygon ([@var{x1},@var{x2},...], [@var{y1},@var{y2},...])}:
4386 dibuja en el plano un polígono de vértices 
4387 @code{[@var{x1},@var{y1}]}, @code{[@var{x2},@var{y2}]}, etc..
4389 Este objeto se ve afectado por las siguientes @i{opciones gráficas}: @code{transparent}, 
4390 @code{fill_color}, @code{border}, @code{line_width}, @code{key},
4391  @code{line_type} y @code{color}.
4393 Ejemplo:
4395 @example
4396 (%i1) load("draw")$
4397 (%i2) draw2d(color      = "#e245f0",
4398              line_width = 8,
4399              polygon([[3,2],[7,2],[5,5]]),
4400              border      = false,
4401              fill_color  = yellow,
4402              polygon([[5,2],[9,2],[7,5]]) )$
4403 @end example
4404 @end deffn
4408 @deffn  {Objeto gráfico} quadrilateral (@var{point_1}, @var{point_2}, @var{point_3}, @var{point_4})
4409 Dibuja un cuadrilátero.
4411 @b{2D}
4413 @code{quadrilateral ([@var{x1},@var{y1}], [@var{x2},@var{y2}], [@var{x3},@var{y3}], [@var{x4},@var{y4}])} dibuja un cuadrilátero de vértices @code{[@var{x1},@var{y1}]}, 
4414 @code{[@var{x2},@var{y2}]}, @code{[@var{x3},@var{y3}]} y @code{[@var{x4},@var{y4}]}.
4416 Este objeto se ve afectado por las siguientes @i{opciones gráficas}: @code{transparent}, 
4417 @code{fill_color}, @code{border}, @code{line_width}, @code{key}, @code{xaxis_secondary}, 
4418 @code{yaxis_secondary}, @code{line_type}, @code{transform} y @code{color}.
4420 Ejemplo:
4422 @example
4423 (%i1) load("draw")$
4424 (%i2) draw2d(
4425         quadrilateral([1,1],[2,2],[3,-1],[2,-2]))$
4426 @end example
4428 @b{3D}
4430 @code{quadrilateral ([@var{x1},@var{y1},@var{z1}], [@var{x2},@var{y2},@var{z2}], [@var{x3},@var{y3},@var{z3}], [@var{x4},@var{y4},@var{z4}])} dibuja un cuadrilátero de vértices
4431 @code{[@var{x1},@var{y1},@var{z1}]}, @code{[@var{x2},@var{y2},@var{z2}]},
4432 @code{[@var{x3},@var{y3},@var{z3}]} y @code{[@var{x4},@var{y4},@var{z4}]}.
4434 Este objeto se ve afectado por las siguientes @i{opciones gráficas}: @code{line_type}, 
4435 @code{line_width}, @code{color}, @code{key}, @code{enhanced3d} y @code{transform}.
4436 @end deffn
4440 @deffn  {Objeto gráfico} rectangle ([@var{x1},@var{y1}], [@var{x2},@var{y2}])
4441 Dibuja rectángulos en 2D.
4443 @b{2D}
4445 @code{rectangle ([@var{x1},@var{y1}], [@var{x2},@var{y2}])} dibuja un rectángulo de vértices opuestos
4446 @code{[@var{x1},@var{y1}]} y @code{[@var{x2},@var{y2}]}.
4448 Este objeto se ve afectado por las siguientes @i{opciones gráficas}: @code{transparent}, 
4449 @code{fill_color}, @code{border}, @code{line_width}, @code{key},
4450 @code{line_type} y @code{color}.
4452 Ejemplo:
4454 @example
4455 (%i1) load("draw")$
4456 (%i2) draw2d(fill_color  = red,
4457              line_width  = 6,
4458              line_type   = dots,
4459              transparent = false,
4460              fill_color  = blue,
4461              rectangle([-2,-2],[8,-1]), /* opposite vertices */
4462              transparent = true,
4463              line_type   = solid,
4464              line_width  = 1,
4465              rectangle([9,4],[2,-1.5]),
4466              xrange      = [-3,10],
4467              yrange      = [-3,4.5] )$
4468 @end example
4469 @end deffn
4476 @deffn  {Objeto gráfico} region (@var{expr},@var{var1},@var{minval1},@var{maxval1},@var{var2},@var{minval2},@var{maxval2})
4477 Dibuja una región del plano definida por desigualdades.
4479 @b{2D}
4480 @var{expr} es una expresión formada por desigualdades y los operadores lógicos
4481 @code{and}, @code{or} y @code{not}. La región está acotada por el rectángulo
4482 definido por @math{[@var{minval1}, @var{maxval1}]} y
4483 @math{[@var{minval2}, @var{maxval2}]}.
4485 Este objeto se ve afectado por las siguientes @i{opciones gráficas}: @code{fill_color}, 
4486 @code{key}, @code{x_voxel} y @code{y_voxel}.
4488 Ejemplo:
4490 @example
4491 (%i1) load("draw")$
4492 (%i2) draw2d(
4493         x_voxel = 30,
4494         y_voxel = 30,
4495         region(x^2+y^2<1 and x^2+y^2 > 1/2,
4496                x, -1.5, 1.5, y, -1.5, 1.5));
4497 @end example
4498 @end deffn
4504 @deffn  {Objeto gráfico} spherical (@var{radius},@var{azi},@var{minazi},@var{maxazi},@var{zen},@var{minzen},@var{maxzen})
4505 Dibuja funciones 3D definidas en coordenadas esféricas.
4507 @b{3D}
4509 @code{spherical (@var{radius},@var{azi},@var{minazi},@var{maxazi},@var{zen},@var{minzen},@var{maxzen})}
4510 dibuja la función @code{@var{radius}(@var{azi},@var{zen})} definida en coordenadas esféricas, con el @i{azimut}
4511 @var{azi} tomando valores desde @var{minazi} hasta @var{maxazi} y el @i{zenit} @var{zen} tomando valores desde
4512 @var{minzen} hasta @var{maxzen}.
4514 Este objeto se ve afectado por las siguientes @i{opciones gráficas}: @code{xu_grid}, 
4515 @code{yv_grid}, @code{line_type}, @code{key}, @code{wired_surface}, @code{enhanced3d} y @code{color}.
4517 Ejemplo:
4519 @example
4520 (%i1) load("draw")$
4521 (%i2) draw3d(spherical(1,a,0,2*%pi,z,0,%pi))$
4522 @end example
4523 @end deffn
4527 @deffn  {Objeto gráfico} triangle (@var{punto_1}, @var{punto_2}, @var{punto_3})
4528 Dibuja un triángulo.
4530 @b{2D}
4532 @code{triangle ([@var{x1},@var{y1}], [@var{x2},@var{y2}], [@var{x3},@var{y3}])} dibuja
4533 un triángulo de vértices @code{[@var{x1},@var{y1}]}, @code{[@var{x2},@var{y2}]} y
4534 @code{[@var{x3},@var{y3}]}.
4536 Este objeto se ve afectado por las siguientes @i{opciones gráficas}: @code{transparent}, 
4537 @code{fill_color}, @code{border}, @code{line_width}, @code{key}, @code{xaxis_secondary}, 
4538 @code{yaxis_secondary}, @code{line_type}, @code{transform} y @code{color}.
4540 Ejemplo:
4542 @example
4543 (%i1) load("draw")$
4544 (%i2) draw2d(
4545         triangle([1,1],[2,2],[3,-1]))$
4546 @end example
4548 @b{3D}
4550 @code{triangle ([@var{x1},@var{y1},@var{z1}], [@var{x2},@var{y2},@var{z2}], [@var{x3},@var{y3},@var{z3}])} dibuja un triángulo de vértices @code{[@var{x1},@var{y1},@var{z1}]},
4551 @code{[@var{x2},@var{y2},@var{z2}]} y @code{[@var{x3},@var{y3},@var{z3}]}.
4553 Este objeto se ve afectado por las siguientes @i{opciones gráficas}: @code{line_type}, 
4554 @code{line_width}, @code{color}, @code{key}, @code{enhanced3d} y @code{transform}.
4555 @end deffn
4559 @deffn  {Objeto gráfico} tube (@var{xfun},@var{yfun},@var{zfun},@var{rfun},@var{p},@var{pmin},@var{pmax})
4560 Dibuja un tubo en 3D de diámetro variable.
4562 @b{3D}
4564 @code{[@var{xfun},@var{yfun},@var{zfun}]}
4565 es la curva paramétrica de parámetro @var{p}, el cual toma valores entre
4566 @var{pmin} y @var{pmax}. Se colocan círculos de radio @var{rfun}
4567 con sus centros sobre la curva paramétrica y perpendiculares a ella.
4569 Este objeto se ve afectado por las siguientes @i{opciones gráficas}: @code{xu_grid}, 
4570 @code{yv_grid}, @code{line_type}, @code{line_width}, @code{key}, @code{wired_surface}, @code{enhanced3d},
4571 @code{color} y @code{capping}.
4573 Ejemplo:
4575 @example
4576 (%i1) load("draw")$
4577 (%i2) draw3d(
4578         enhanced3d = true,
4579         xu_grid    = 50,
4580         tube(cos(a), a, 0, cos(a/10)^2,
4581              a, 0, 4*%pi) )$
4582 @end example
4584 @end deffn
4589 @deffn  {Objeto gráfico} vector ([@var{x},@var{y}], [@var{dx},@var{dy}])
4590 @deffnx {Objeto gráfico} vector ([@var{x},@var{y},@var{z}], [@var{dx},@var{dy},@var{dz}])
4591 Dibuja vectores en 2D y 3D.
4593 Este objeto se ve afectado por las siguientes @i{opciones gráficas}: @code{head_both}, 
4594 @code{head_length}, @code{head_angle}, @code{head_type}, @code{line_width}, 
4595 @code{line_type}, @code{key} y @code{color}.
4597 @b{2D}
4599 @code{vector ([@var{x},@var{y}], [@var{dx},@var{dy}])} dibuja el vector 
4600 @code{[@var{dx},@var{dy}]} con origen en @code{[@var{x},@var{y}]}.
4602 Ejemplo:
4604 @example
4605 (%i1) load("draw")$
4606 (%i2) draw2d(xrange      = [0,12],
4607              yrange      = [0,10],
4608              head_length = 1,
4609              vector([0,1],[5,5]), /* default type */
4610              head_type = 'empty,
4611              vector([3,1],[5,5]),
4612              head_both = true,
4613              head_type = 'nofilled,
4614              line_type = dots,
4615              vector([6,1],[5,5]))$
4616 @end example
4618 @b{3D}
4620 @code{vector([@var{x},@var{y},@var{z}], [@var{dx},@var{dy},@var{dz}])}
4621 dibuja el vector @code{[@var{dx},@var{dy},@var{dz}]} con 
4622 origen en @code{[@var{x},@var{y},@var{z}]}.
4624 Ejemplo:
4626 @example
4627 (%i1) load("draw")$
4628 (%i2) draw3d(color = cyan,
4629              vector([0,0,0],[1,1,1]/sqrt(3)),
4630              vector([0,0,0],[1,-1,0]/sqrt(2)),
4631              vector([0,0,0],[1,1,-2]/sqrt(6)) )$
4632 @end example
4633 @end deffn
4644 @node Funciones y variables para picture, Funciones y variables para worldmap, Funciones y variables para draw, draw
4645 @section Funciones y variables para picture
4651 @deffn  {Función} get_pixel (@var{pic},@var{x},@var{y})
4652 Devuelve el pixel de la imagen @var{pic}. Las coordenadas @var{x} e @var{y}
4653 van desde 0 hasta @code{ancho-1} y @code{alto-1}, respectivamente.
4654 @end deffn
4659 @deffn  {Función} make_level_picture (@var{data})
4660 @deffnx {Función} make_level_picture (@var{data},@var{width},@var{height})
4661 Devuelve un objeto @code{picture} consistente en una imagen de niveles.
4662 @code{make_level_picture (@var{data})} construye el objeto @code{picture}
4663 a partir de la matriz @var{data}.
4664 @code{make_level_picture (@var{data},@var{width},@var{height})}
4665 construye el objeto a partir de una lista de números, en cuyo
4666 caso deben indicarse el ancho @var{width} y la altura @var{height}
4667 en píxeles.
4669 El objeto  @code{picture} devuelto contiene los siguientes cuatro
4670 elemento:
4672 @enumerate
4673 @item el símbolo @code{level}
4674 @item anchura de la imagen
4675 @item altura de la imagen
4676 @item un array de enteros con los valores de los píxeles
4677 entre 0 y 255. El argumento @var{data} debe contener sólo números
4678 entre 0 y 255; los cantidades negativas se transforman en ceros y las 
4679 que son mayores de 255 se igualan a este número.
4680 @end enumerate
4682 Ejemplo:
4684 Imagen de niveles a partir de una matriz.
4685 @example
4686 (%i1) load("draw")$
4687 (%i2) make_level_picture(matrix([3,2,5],[7,-9,3000]));
4688 (%o2)         picture(level, 3, 2, @{Array:  #(3 2 5 7 0 255)@})
4689 @end example
4691 Imagen de niveles a partir de una lista numérica.
4692 @example
4693 (%i1) load("draw")$
4694 (%i2) make_level_picture([-2,0,54,%pi],2,2);
4695 (%o2)            picture(level, 2, 2, @{Array:  #(0 0 54 3)@})
4696 @end example
4697 @end deffn
4702 @deffn  {Función} make_rgb_picture (@var{redlevel},@var{greenlevel},@var{bluelevel})
4703 Devuelve un objeto @var{picture} conteniendo una imagen en color (RGB).
4704 Los tres argumentos deben ser imágenes de niveles, para el rojo (R),
4705 verde (G) y azul (B).
4707 El objeto  @var{picture} devuelto contiene los siguientes cuatro
4708 elemento:
4710 @enumerate
4711 @item el símbolo @code{rgb}
4712 @item anchura de la imagen
4713 @item altura de la imagen
4714 @item un array de enteros de @var{3*ancho*alto} con los valores de los píxeles
4715 entre 0 y 255. Cada valor de pixel se representa en el array con tres números consecutivos
4716 (rojo, verde, azul).
4717 @end enumerate
4719 Ejemplo:
4721 @example
4722 (%i1) load("draw")$
4723 (%i2) red: make_level_picture(matrix([3,2],[7,260]));
4724 (%o2)           picture(level, 2, 2, @{Array:  #(3 2 7 255)@})
4725 (%i3) green: make_level_picture(matrix([54,23],[73,-9]));
4726 (%o3)           picture(level, 2, 2, @{Array:  #(54 23 73 0)@})
4727 (%i4) blue: make_level_picture(matrix([123,82],[45,32.5698]));
4728 (%o4)          picture(level, 2, 2, @{Array:  #(123 82 45 33)@})
4729 (%i5) make_rgb_picture(red,green,blue);
4730 (%o5) picture(rgb, 2, 2, 
4731               @{Array:  #(3 54 123 2 23 82 7 73 45 255 0 33)@})
4732 @end example
4733 @end deffn
4739 @deffn  {Función} negative_picture (@var{pic})
4740 Devuelve el negativo de la imagen, sea ésta de tipo nivel (@var{level})
4741 o color (@var{rgb}).
4742 @end deffn
4747 @deffn  {Función} picture_equalp (@var{x},@var{y})
4748 Devuelve @code{true} si los dos argumentos son imágenes idénticas,
4749 o @code{false} en caso contrario.
4750 @end deffn
4755 @deffn  {Función} picturep (@var{x})
4756 Devuelve @code{true} si el argumento es una imagen bien formada,
4757 o @code{false} en caso contrario.
4758 @end deffn
4763 @deffn  {Función} read_xpm (@var{xpm_file})
4764 Lee el fichero gráfico en formato xpm y devuelve un objeto @code{picture}.
4765 @end deffn
4770 @deffn  {Función} rgb2level (@var{pic})
4771 Transforma una imagen en color @var{rgb} a otra de niveles @var{level}
4772 promediando los niveles.
4773 @end deffn
4778 @deffn  {Función} take_channel (@var{im},@var{color})
4779 Si el argumento @var{color} es @code{red}, @code{green} o @code{blue},
4780 la función @code{take_channel} devuelve el canal de color correspondiente
4781 de la imagen @var{im}.
4783 Ejemplo:
4785 @example
4786 (%i1) load("draw")$
4787 (%i2) red: make_level_picture(matrix([3,2],[7,260]));
4788 (%o2)           picture(level, 2, 2, @{Array:  #(3 2 7 255)@})
4789 (%i3) green: make_level_picture(matrix([54,23],[73,-9]));
4790 (%o3)           picture(level, 2, 2, @{Array:  #(54 23 73 0)@})
4791 (%i4) blue: make_level_picture(matrix([123,82],[45,32.5698]));
4792 (%o4)          picture(level, 2, 2, @{Array:  #(123 82 45 33)@})
4793 (%i5) make_rgb_picture(red,green,blue);
4794 (%o5) picture(rgb, 2, 2, 
4795               @{Array:  #(3 54 123 2 23 82 7 73 45 255 0 33)@})
4796 (%i6) take_channel(%,'green);  /* simple quote!!! */
4797 (%o6)           picture(level, 2, 2, @{Array:  #(54 23 73 0)@})
4798 @end example
4799 @end deffn
4803 @node Funciones y variables para worldmap,  , Funciones y variables para picture, draw
4804 @section Funciones y variables para worldmap
4807 Este paquete carga automáticamente el paquete @code{draw}.
4810 @subsection Variables y Funciones
4817 @defvr {Global variable} boundaries_array
4818 Valor por defecto: @code{false}
4820 @code{boundaries_array} es donde el objeto gráfico @code{geomap} lee
4821 las coordenadas de las líneas fronterizas.
4823 Cada componente de @code{boundaries_array} es un array de números decimales
4824 en coma flotante representando las coordenadas que definen un segmento
4825 poligonal o línea fronteriza.
4827 Véase también @code{geomap}.
4828 @end defvr
4833 @deffn  {Función} numbered_boundaries (@var{nlist})
4834 Dibuja una lista de segmentos poligonales (líneas 
4835 fronterizas), etiquetadas con sus números correspondientes
4836 (coordenadas de @code{boundaries_array}). Esta función es
4837 de mucha ayuda a la hora de definir nuevas entidades
4838 geográficas.
4840 Ejemplo:
4842 Mapa de Europa con las fronteras y costas etiquetadas con
4843 su componente numérica de @code{boundaries_array}.
4844 @example
4845 (%i1) load("worldmap")$
4846 (%i2) european_borders: 
4847            region_boundaries(-31.81,74.92,49.84,32.06)$
4848 (%i3) numbered_boundaries(european_borders)$
4849 @end example
4850 @end deffn
4855 @deffn  {Función} make_poly_continent (@var{continent_name})
4856 @deffnx  {Función} make_poly_continent (@var{country_list})
4857 Construye los polígonos necesarios para dibujar
4858 un continente o lista de países coloreados.
4860 Ejemplo:
4862 @example
4863 (%i1) load("worldmap")$
4864 (%i2) /* A continent */
4865       make_poly_continent(Africa)$
4866 (%i3) apply(draw2d, %)$
4867 (%i4) /* A list of countries */
4868       make_poly_continent([Germany,Denmark,Poland])$
4869 (%i5) apply(draw2d, %)$
4870 @end example
4871 @end deffn
4877 @deffn  {Función} make_poly_country (@var{country_name})
4878 Construye los polígonos necesarios para dibujar
4879 un país coloreado. En caso de contener islas,
4880 un país tendrá asociados varios polígonos.
4882 Ejemplo:
4884 @example
4885 (%i1) load("worldmap")$
4886 (%i2) make_poly_country(India)$
4887 (%i3) apply(draw2d, %)$
4888 @end example
4889 @end deffn
4894 @deffn  {Función} make_polygon (@var{nlist})
4895 Devuelve un objeto @code{polygon} a partie de una lista
4896 de líneas fronterizas y de costas. El
4897 argumento @var{nlist} debe ser una lista de componentes
4898 de @code{boundaries_array}.
4900 Ejemplo:
4902 La variable Bhutan (Bután) está definida con los números
4903 fronterizos 171, 173 y 1143, de manera que @code{make_polygon([171,173,1143])}
4904 concatena los arrays @code{boundaries_array[171]}, @code{boundaries_array[173]} y
4905 @code{boundaries_array[1143]} y devuelve un objeto @code{polygon}
4906 apto para ser dibujado por @code{draw}. A fin de evitar mensajes
4907 de errores, los arrays deben ser compatibles en el sentido de que dos
4908 de ellos consecutivos deben tener dos coordenadas comunes en los
4909 extremos. En este ejemplo, las dos primeras componentes de 
4910 @code{boundaries_array[171]} son iguales a las dos últimas de
4911 @code{boundaries_array[173]}, y las dos primeras de @code{boundaries_array[173]}
4912 coinciden con las dos primeras de @code{boundaries_array[1143]};
4913 en conclusión, los números de segmentos poligonales171, 173 y 1143
4914 (en este orden) son compatibles y el polígono
4915 coloreado se podrá dibujar.
4916 @example
4917 (%i1) load("worldmap")$
4918 (%i2) Bhutan;
4919 (%o2)                        [[171, 173, 1143]]
4920 (%i3) boundaries_array[171];
4921 (%o3) @{Array:  
4922        #(88.750549 27.14727 88.806351 27.25305 88.901367 27.282221
4923          88.917877 27.321039)@}
4924 (%i4) boundaries_array[173];
4925 (%o4) @{Array:
4926        #(91.659554 27.76511 91.6008 27.66666 91.598022 27.62499
4927          91.631348 27.536381 91.765533 27.45694 91.775253 27.4161 
4928          92.007751 27.471939 92.11441 27.28583 92.015259 27.168051
4929          92.015533 27.08083 92.083313 27.02277 92.112183 26.920271
4930          92.069977 26.86194 91.997192 26.85194 91.915253 26.893881
4931          91.916924 26.85416 91.8358 26.863331 91.712479 26.799999 
4932          91.542191 26.80444 91.492188 26.87472 91.418854 26.873329
4933          91.371353 26.800831 91.307457 26.778049 90.682457 26.77417
4934          90.392197 26.903601 90.344131 26.894159 90.143044 26.75333
4935          89.98996 26.73583 89.841919 26.70138 89.618301 26.72694 
4936          89.636093 26.771111 89.360786 26.859989 89.22081 26.81472
4937          89.110237 26.829161 88.921631 26.98777 88.873016 26.95499
4938          88.867737 27.080549 88.843307 27.108601 88.750549 
4939          27.14727)@}
4940 (%i5) boundaries_array[1143];
4941 (%o5) @{Array:  
4942        #(91.659554 27.76511 91.666924 27.88888 91.65831 27.94805 
4943          91.338028 28.05249 91.314972 28.096661 91.108856 27.971109
4944          91.015808 27.97777 90.896927 28.05055 90.382462 28.07972
4945          90.396088 28.23555 90.366074 28.257771 89.996353 28.32333
4946          89.83165 28.24888 89.58609 28.139999 89.35997 27.87166 
4947          89.225517 27.795 89.125793 27.56749 88.971077 27.47361
4948          88.917877 27.321039)@}
4949 (%i6) Bhutan_polygon: make_polygon([171,173,1143])$
4950 (%i7) draw2d(Bhutan_polygon)$
4951 @end example
4952 @end deffn
4957 @deffn  {Función} region_boundaries (@var{x1},@var{y1},@var{x2},@var{y2})
4958 Detecta los segmentos poligonales almacenados en la variable global
4959 @code{boundaries_array} totalmente contenidos en el rectángulo de vértices
4960 (@var{x1},@var{y1}) -superior izquierdo- y (@var{x2},@var{y2})
4961 -inferior derecho-.
4963 Ejemplo:
4965 Devuelve los números de los segmentos necesarios para
4966 dibujar el sur de Italia.
4967 @example
4968 (%i1) load("worldmap")$
4969 (%i2) region_boundaries(10.4,41.5,20.7,35.4);
4970 (%o2)                [1846, 1863, 1864, 1881, 1888, 1894]
4971 (%i3) draw2d(geomap(%))$
4972 @end example
4973 @end deffn
4978 @deffn  {Función} region_boundaries_plus (@var{x1},@var{y1},@var{x2},@var{y2})
4979 Detecta los segmentos poligonales almacenados en la variable global
4980 @code{boundaries_array} con al menos un vértice dentro del rectángulo 
4981 definido por los extremos (@var{x1},@var{y1}) -superior izquierdo- y (@var{x2},@var{y2})
4982 -inferior derecho-.
4984 Ejemplo:
4986 @example
4987 (%i1) load("worldmap")$
4988 (%i2) region_boundaries_plus(10.4,41.5,20.7,35.4);
4989 (%o2) [1060, 1062, 1076, 1835, 1839, 1844, 1846, 1858,
4990        1861, 1863, 1864, 1871, 1881, 1888, 1894, 1897]
4991 (%i3) draw2d(geomap(%))$
4992 @end example
4993 @end deffn
4997 @subsection Objetos gráficos
5002 @deffn  {Objeto gráfico} geomap (@var{numlist})
5003 @deffnx {Objeto gráfico} geomap (@var{numlist},@var{3Dprojection})
5004 Dibuja mapas cartográficos en 2D y 3D.
5006 @b{2D}
5008 Esta función trabaja junto con la variable global @code{boundaries_array}.
5010 El argumento @var{numlist} es una lista de números o de listas de 
5011 números. Todos estos números deben ser enteros mayores o iguales que cero,
5012 representando las componentes del array global @code{boundaries_array}.
5014 Cada componente de @code{boundaries_array} es un array de decimales en
5015 coma flotante, las coordenadas de un segmento poligonal o línea
5016 fronteriza.
5018 @code{geomap (@var{numlist})} toma los enteros de sus argumentos y 
5019 dibuja los segmentos poligonales asociados de @code{boundaries_array}.
5021 Este objeto se ve afectado por las siguientes @i{opciones gráficas}: @code{line_width}, 
5022 @code{line_type} y @code{color}.
5024 Ejemplos:
5026 Un sencillo mapa hecho a mano:
5027 @example
5028 (%i1) load("worldmap")$
5029 (%i2) /* Vertices of boundary #0: @{(1,1),(2,5),(4,3)@} */
5030    ( bnd0: make_array(flonum,6),
5031      bnd0[0]:1.0, bnd0[1]:1.0, bnd0[2]:2.0,
5032      bnd0[3]:5.0, bnd0[4]:4.0, bnd0[5]:3.0 )$
5033 (%i3) /* Vertices of boundary #1: @{(4,3),(5,4),(6,4),(5,1)@} */
5034    ( bnd1: make_array(flonum,8),
5035      bnd1[0]:4.0, bnd1[1]:3.0, bnd1[2]:5.0, bnd1[3]:4.0,
5036      bnd1[4]:6.0, bnd1[5]:4.0, bnd1[6]:5.0, bnd1[7]:1.0)$
5037 (%i4) /* Vertices of boundary #2: @{(5,1), (3,0), (1,1)@} */
5038    ( bnd2: make_array(flonum,6),
5039      bnd2[0]:5.0, bnd2[1]:1.0, bnd2[2]:3.0,
5040      bnd2[3]:0.0, bnd2[4]:1.0, bnd2[5]:1.0 )$
5041 (%i5) /* Vertices of boundary #3: @{(1,1), (4,3)@} */
5042    ( bnd3: make_array(flonum,4),
5043      bnd3[0]:1.0, bnd3[1]:1.0, bnd3[2]:4.0, bnd3[3]:3.0)$
5044 (%i6) /* Vertices of boundary #4: @{(4,3), (5,1)@} */
5045    ( bnd4: make_array(flonum,4),
5046      bnd4[0]:4.0, bnd4[1]:3.0, bnd4[2]:5.0, bnd4[3]:1.0)$
5047 (%i7) /* Pack all together in boundaries_array */
5048    ( boundaries_array: make_array(any,5),
5049      boundaries_array[0]: bnd0, boundaries_array[1]: bnd1,
5050      boundaries_array[2]: bnd2, boundaries_array[3]: bnd3,
5051      boundaries_array[4]: bnd4 )$
5052 (%i8) draw2d(geomap([0,1,2,3,4]))$
5053 @end example
5055 El paquete auxiliar @code{worldmap} asigna al array global
5056 @code{boundaries_array} líneas fronterizas
5057 reales en coordenadas (longitud, latitud). Estos datos son
5058 de dominio público y proceden de
5059 @url{http://www-cger.nies.go.jp/grid-e/gridtxt/grid19.html}.
5060 El paquete @code{worldmap} también define fronteras 
5061 de países, continentes y líneas
5062 costeras a partir de las
5063 componentes de @code{boundaries_array} (véase el
5064 fichero @code{share/draw/worldmap.mac} para más
5065 información). El paquete @code{worldmap} carga
5066 automáticamente el paquete @code{draw}.
5067 @example
5068 (%i1) load("worldmap")$
5069 (%i2) c1: gr2d(geomap([Canada,United_States,
5070                        Mexico,Cuba]))$
5071 (%i3) c2: gr2d(geomap(Africa))$
5072 (%i4) c3: gr2d(geomap([Oceania,China,Japan]))$
5073 (%i5) c4: gr2d(geomap([France,Portugal,Spain,
5074                        Morocco,Western_Sahara]))$
5075 (%i6) draw(columns  = 2,
5076            c1,c2,c3,c4)$
5077 @end example
5079 @code{worldmap} se puede utilizar para dibujar países
5080 como polígonos. En este caso, ya no será necesario
5081 hacer uso del objeto gráfico @code{geomap}, pero sí de
5082 @code{polygon}. Puesto que en este caso se utilizan listas en lugar de
5083 arrays, los mapas se reproducirán de forma más lenta. Véanse
5084 también @code{make_poly_country} y @code{make_poly_continent} para
5085 comprender el siguiente código.
5086 @example
5087 (%i1) load("worldmap")$
5088 (%i2) mymap: append(
5089    [color      = white],  /* borders are white */
5090    [fill_color = red],             make_poly_country(Bolivia),
5091    [fill_color = cyan],            make_poly_country(Paraguay),
5092    [fill_color = green],           make_poly_country(Colombia),
5093    [fill_color = blue],            make_poly_country(Chile),
5094    [fill_color = "#23ab0f"],       make_poly_country(Brazil),
5095    [fill_color = goldenrod],       make_poly_country(Argentina),
5096    [fill_color = "midnight-blue"], make_poly_country(Uruguay))$
5097 (%i3) apply(draw2d, mymap)$
5098 @end example
5100 @b{3D}
5102 @code{geomap (@var{numlist})} proyecta los mapas sobre la esfera de radio 1
5103 y centro (0,0,0). Es posible cambiar la esfera o el tipo de proyección haciendo
5104 uso de @code{geomap (@var{numlist},@var{3Dprojection})}.
5106 Proyecciones 3D disponibles:
5108 @itemize @bullet
5109 @item
5110 @code{[spherical_projection,@var{x},@var{y},@var{z},@var{r}]}: proyecta los mapas sobre la esfera de radio
5111 @var{r} y centro (@var{x},@var{y},@var{z}).
5112 @example
5113 (%i1) load("worldmap")$
5114 (%i2) draw3d(geomap(Australia), /* default projection */
5115              geomap(Australia,
5116                     [spherical_projection,2,2,2,3]))$
5117 @end example
5119 @item
5120 @code{[cylindrical_projection,@var{x},@var{y},@var{z},@var{r},@var{rc}]}: re-proyecta mapas esféricos
5121 sobre el cilindro de radio @var{rc} cuyo eje pasa a través de los polos del globo
5122 de radio @var{r} y centro (@var{x},@var{y},@var{z}).
5123 @example
5124 (%i1) load("worldmap")$
5125 (%i2) draw3d(geomap([America_coastlines,Eurasia_coastlines],
5126                     [cylindrical_projection,2,2,2,3,4]))$
5127 @end example
5129 @item
5130 @code{[conic_projection,@var{x},@var{y},@var{z},@var{r},@var{alpha}]}: re-proyecta mapas esféricos sobre los
5131 conos de ángulo @var{alpha}, cuyos ejes pasan a través de los polos del globo de radio @var{r} 
5132 y centro (@var{x},@var{y},@var{z}). Ambos conos, norte y sur, son tangentes a la esfera.
5133 @example
5134 (%i1) load("worldmap")$
5135 (%i2) draw3d(geomap(World_coastlines,
5136                     [conic_projection,0,0,0,1,90]))$
5137 @end example
5138 @end itemize
5140 En @url{https://riotorto.users.sourceforge.net/Maxima/gnuplot/geomap/}
5141 hay ejemplos más elaborados.
5142 @end deffn