Capítulo 5 - Figuras Geométricas

Uno de los principales objetos o entidades en el campo de la programación gráfica es la figura geométrica. Algunas figuras se usan más que otras, pero todas pueden sernos útiles a la hora de representarlas gráficamente. Algunas API's gráficas contienen todas o algunas de las siguientes figuras geométricas, que trataremos a continuación.

Figuras Geométricas Básicas

Vértices

[IMAGEN]: Figura 1 - Vértices
Figura 1 - Vértices

No son figuras geométricas como tales, pero forman la base de toda figura geométrica. En algunas ocasiones, nos interesa mostrar los vértices como puntos en la pantalla: v0, v1, v2, …, vn.

Línea Recta

[IMAGEN]: Figura 2 - Línea
Figura 2 - Línea

Matemáticamente hablando, no se trata de una línea recta, sino de un segmento. Aunque no se trate de una figura geométrica, como tal, la línea recta forma la base de los trazados de las figuras. Requerimos dos vértices para crear una línea o segmento: v0, y v1.

Triángulo

[IMAGEN]: Figura 3 - Triángulo
Figura 3 - Triángulo

Esta figura geométrica también forma la base de la representación de objetos gráficos, especialmente a la hora de representar objetos en tres dimensiones: v0, v1, y v2. Podemos crear un objeto complejo a partir de triángulos. Necesitamos tres vértices para formar un triángulo.

Abanico de Triángulos

[IMAGEN]: Figura 4 - Abanico de Triángulos
Figura 4 - Abanico de triángulos

Se trata de una serie de triángulos unidos entre sí con un vértice común como el centro del abanico. Como mínimo debe haber tres vértices para formar el primer triángulo: v0, v1, y v2. Los siguientes triángulos se crean a partir de un vértice nuevo, el vértice central del abanico, y el vértice perteneciente al triángulo contiguo.

Tira de Triángulos

[IMAGEN]: Figura 5 - Tira de Triángulos
Figura 5 - Tira de triángulos

Se trata de otra serie de triángulos unidos entre sí para formar un cinta o tira. Como mínimo debe haber tres vértices para formar el triángulo inicial: v0, v1, y v2. Los siguientes triángulos se forman a partir de un vértice nuevo y dos vértices que pertenecen al triángulo contiguo.

Rectángulo

[IMAGEN]: Figura 6 - Rectángulo
Figura 6 - Rectángulo

Otra figura geométrica importante es el rectángulo que también se usa para dibujar cuadrados. Debido a su simetría, sólo requerimos conocer dos vértices, v0, y v1, que forman dos esquinas opuestas. En total, obtendremos cuatro números diferentes, con los cuales podemos averiguar las coordenadas de los otros dos vértices.

Cuadrilátero

[IMAGEN]: Figura 7 - Cuadrilátero
Figura 7 - Cuadrilátero

Esta figura geométrica también es usada con frecuencia, tanto para representar objetos en dos como en tres dimensiones. Necesitamos cuatro vértices para formar el cuadrilátero, v0, v1, v2, y v3.

Tira de Cuadriláteros

[IMAGEN]: Figura 8 - Tira de Cuadriláteros
Figura 8 - Tira de cuadriláteros

Se trata de una serie de cuadriláteros unidos entre sí para formar un cinta o tira. Como mínimo necesitamos cuatro vértices para el cuadrilátero inicial: v0, v1, v2, y v3. Los siguientes cuadriláteros, en la tira, se forman con dos vértices nuevos y con dos vértices pertenecientes al cuadrilátero contiguo.

Polígonos

[IMAGEN]: Figura 9 - Polígono
Figura 9 - Polígono

Generalmente, las figuras que nos interesan suelen ser irregulares y con muchos más vértices que 2, 3, ó 4. Además, algunas API's gráficas ofrecen la funcionalidad de describir figuras geométricas según una lista de vértices. Típicamente, la funcionalidad de crear polígonos requiere n vértices, donde automáticamente se une el último vértice, vn, con el primero, v0, para poder cerrar la figura y formar un polígono [cerrado].

Elipse/Círculo

[IMAGEN]: Figura 10 - Elipse/Círculo #1
Figura 10.1 - Elipse/Círculo #1

La elipse al igual que el círculo son otras figuras que nos pueden servir en ocasiones, dependiendo de la escena o "dibujo" que queramos crear. El círculo, o la circunferencia, si la preferimos, es un caso especial de la elipse. Algunas API's gráficas describen las elipses y círculos de formas diferentes. Existen principalmente dos maneras de describir tales figuras:

  1. Punto central, c; y dos longitudes para ambos radios, r1 y r2; o
  2. Un rectángulo, v0 y v1, que circunscribe la elipse o el círculo.
[IMAGEN]: Figura 10 - Elipse/Círculo #2
Figura 10.2 - Elipse/Círculo #2

Arco

[IMAGEN]: Figura 11 - Arco #1
Figura 11.1 - Arco #1

El arco es una línea curva que describe el perímetro total o parcial de una elipse o circunferencia. Como se trata de una línea, no podemos hablar de un área ni rellenarla. La mayoría de las API's gráficas ofrecen tal elemento gráfico con una de dos formas para su descripción:

  1. Punto central, c; dos radios, r1 y r2; y dos ángulos, para describir el ángulo inicial, α, y el final, β; o
  2. Un rectángulo, v0 y v1, que circunscribe el arco; y dos ángulos, para describir el ángulo inicial, α, y el final, β.
[IMAGEN]: Figura 11 - Arco #2
Figura 11.2 - Arco #2

Sector/Cuña

[IMAGEN]: Figura 12 - Sector/Cuña #1
Figura 12.1 - Sector/Cuña #1

Podemos crear cuñas o sectores que básicamente se parecen a un "trozo de tarta". Esta superficie se basa en una elipse, como el arco, mencionado previamente. Creamos el sector como el arco, pero uniendo cada extremo al centro de la elipse o círculo con un segmento. Existen dos formas populares para describir un sector:

  1. Punto central, c; dos radios, r1 y r2; y dos ángulos, para describir el ángulo inicial, α, y el final, β; o
  2. Un rectángulo, v0 y v1, que circunscribe el sector; y dos ángulos, para describir el ángulo inicial, α, y el final, β.
[IMAGEN]: Figura 12 - Sector/Cuña #2
Figura 12.2 - Sector/Cuña #2

Segmento elíptico

[IMAGEN]: Figura 13 - Segmento elíptico #1
Figura 13.1 - Sector elíptico #1

El segmento elíptico se basa en una elipse como el arco y el sector. Esta figura se parece a un sector, pero en lugar de unir cada extremo al centro con segmentos, unimos los extremos entre sí con un segmento. Existen dos formas comunes para describir un segmento elíptico:

  1. Punto central, c; dos radios, r1 y r2; y dos ángulos, para describir el ángulo inicial, α, y el final, β; o
  2. Un rectángulo, v0 y v1, que circunscribe el segmento elíptico; y dos ángulos, para describir el ángulo inicial, α, y el final, β.
[IMAGEN]: Figura 13 - Segmento elíptico #2
Figura 13.2 - Sector elíptico #2

Curva de Bézier

[IMAGEN]: Figura 14 - Curva de Bézier
Figura 14 - Curva de Bézier

Esta curva fue descubierta por Pierre Bézier, mientras trabajaba para la compañía de automóviles, Renault, en los años 1960. Para poder diseñar adecuadamente las superficies curvas de los automóviles modernos, necesitaba una forma matemática, pero sencilla. Encontró la solución con una ecuación paramétrica definida como ecuaciones cúbicas. Por esta razón, también se denomina esta curva como curva de Bézier del tercer orden, al usar una ecuación cúbica. Se describe esta curva con cuatro puntos: dos puntos indican el punto inicial, (x0, y0), y final, (x3, y3), de la curva, mientras que los otros dos sirven como puntos de control: (x1, y1) y (x2, y2). Estos puntos de control modifican la curva dependiendo de su posición relativa a los puntos iniciales y finales. Se puede pensar en estos puntos de control como si describieran una atracción, como la gravedad, tirando parte de la curva hacia su centro.

Las fórmulas se basan en el parámetro t que queda comprendido en el intervalo [0,1]. Éstas son:

x(t)  = Axt3 + Bxt2 + Cxt + x0
   x1 = x0 + Cx / 3
   x2 = x1 + (Cx + Bx) / 3
   x3 = x0 + Cx + Bx + Ax

y(t)  = Ayt3 + Byt2 + Cyt + y0
   y1 = y0 + Cy / 3
   y2 = y1 + (Cy + By) / 3
   y3 = y0 + Cy + By + Ay

Con estas ecuaciones, podemos calcular los respectivos coeficientes para x(t) e y(t):

Cx = 3*(x1 - x0)
Bx = 3*(x2 - x1) - Cx
Ax = x3 - x0 - Cx - Bx

Cy = 3*(y1 - y0)
By = 3*(y2 - y1) - Cy
Ay = y3 - y0 - Cy - By

Rectángulo Redondo

[IMAGEN]: Figura 15 - Rectángulo Redondo
Figura 15 - Rectángulo redondo

Una variante del rectángulo es el "rectángulo redondo". Esta figura es similar a un rectángulo, pero las cuatro esquinas son curvas. Las curvas son cuartos de un círculo; o sea, 90° de un círculo. Podemos describir esta figura con dos vértices, v0, y v1, que forman las dos esquinas opuestas del rectángulo. Luego, necesitamos otros dos valores que indican la altura, h, y la anchura, a. Ambos valores describen el centro de la circunferencia con respecto a las esquinas del rectángulo. Tal información afecta todas las esquinas, por lo que el cuarto de círculo es la misma figura para cada una.

Ejemplos de Figuras Geométricas

Veamos algunos ejemplos de otras figuras geométricas que podemos construir a partir de las figuras fundamentales que hemos descrito anteriormente.

1. Polígonos Regulares

Un polígono regular se compone de aristas/lados de igual longitud. Esto implica que el ángulo entre cada arista contigua es el mismo. Si trazamos un segmento del centro a un vértice y otro segmento del centro a otro vértice contiguo, entonces el ángulo entre estos dos segmentos es un divisor de 2π = 360°. En otras palabras, cada ángulo mencionado es inversamente proporcional a la cantidad de lados del polígono regular. Podemos usar la siguiente fórmula:

α = 2π / N,   donde α es el ángulo, y N es la cantidad de lados

Crearemos polígonos regulares en base a una circunferencia que circunscribe nuestro polígono regular. Esto implica, que el centro de la circunferencia coincide con el centro geométrico de cualquier polígono regular. Para esto, necesitamos usar algunas funciones trigonométricas, junto con el ángulo ya calculado. El paso principal es averiguar la coordenada del siguiente vértice de nuestro polígono. Usaremos las siguientes fórmulas:

xi = cx + r * cos( i*α ),
yi = cy + r * sen( i*α )

donde:

  • i = 0,1,2,…,N-1,
  • r es el radio de la circunferencia, y
  • c = (cx, cy) es la coordenada del centro geométrico de la circunferencia y del polígono.

Al agregar el centro a nuestra fórmula, conseguimos mover el centro geométrico del origen (0,0) al que nosotros deseemos.

1.1. Pentágono Regular

[IMAGEN]: Figura 16 - Polígono - N=5
Figura 16 - Polígono - N=5

Con un pentágono, tenemos que N=5, por lo que α = 2π / 5, que equivale a 72°. Suponiendo que c = (0,0) y r = 1,00, la lista de vértices es:

(1,0000, 0,0000),
(0,3090, 0,9511),
(-0,8090, 0,5878),
(-0,8090, -0,5878),
(0,3090, -0,9511)

Podemos ver el resultado en la figura 16.

1.2. Algoritmo

Ahora presentaremos el algoritmo para implementar el trazado de un polígono regular:

Polígono_Regular( N, centro, radio )
  1. Crear una lista de N vértices: vértices
  2. alfa Figura 2π / N
  3. Bucle: i ← 1 hasta N
  4. vértices[i].x ← centro.x + radio * cos( (i-1)*alfa )
  5. vértices[i].y ← centro.y + radio * sen( (i-1)*alfa )
  6. Dibujar_Polígono( vértices, N )
  7. Terminar.

La función Dibujar_Polígono() se refiere a la función de la biblioteca o API gráfica para trazar líneas rectas consecutivas de un vértice o punto a otro según una lista de puntos. Si tal función primitiva no existe, entonces a continuación presentaremos su algoritmo usando la función primitiva, Dibujar_Polígono():

Dibujar_Polígono( vértices, N )
  1. Bucle: i ← 2 hasta N
  2. Dibujar_Polígono( vértices[i-1].x, vértices[i-1].y, vértices[i].x, vértices[i].y )
  3. Dibujar_Polígono( vértices[N].x, vértices[N].y, vértices[1].x, vértices[1].y )
  4. Terminar.

2. Composición

El objetivo de usar estas figuras geométricas es para poder construir figuras más complejas basadas en las primitivas. He aquí algunos ejemplos de figuras compuestas.

2.1. Cara

[IMAGEN]: Figura 17 - Cara
Figura 17 - Cara

Un ejemplo relativamente sencillo de una imagen compleja es crear una cara. Para no complicar el ejemplo, dibujaremos la cabeza como un círculo, los dos ojos como dos círculos, la nariz como un triángulo, y la boca como un semicírculo. El resultado se puede ver en la figura 17.

2.2. Arco Persa

[IMAGEN]: Figura 18 - Arco Persa
Figura 18 - Arco Persa

Otro ejemplo es el de dibujar una ventana de estilo persa. Esto consiste en dibujar varios arcos, unidos entre sí, seguidos de líneas rectas. La figura 18 muestra una simple imagen de la idea citada.

3. Visualización de Datos

Una aplicación en asuntos laborales, pero menos artística, es en la presentación de datos con ámbito visual. Desde la presentación del censo popular de una región usando barras hasta las presentaciones de cifras de precios de varios productos en una empresa usando diagramas en tartas (pie charts, en inglés) hacen uso de gráficos simples pero potentes en cuanto a la información que conllevan. Aquí presentaremos algunos ejemplos de tales usos.

3.1. Barras

[IMAGEN]: Figura 19 - Barras
Figura 19 - Barras

Podríamos decir que las barras son el gráfico architípico de las presentaciones en empresas al igual que los estadísticos al mostrar las diferencias en población. La figura 19 muestra un claro ejemplo de tales datos.

3.2. Gráficos circulares

[IMAGEN]: Figura 20 - Gráfico Circular
Figura 20 - Gráfico Circular

Otro gráfico popular en la representación de estadísticas es la "tarta" o gráfico circular. La figura 20 nos da una idea del conocido gráfico.

4. Diagramas

[IMAGEN]: Figura 21 - Circuito Eléctrico
Figura 21 - Circuito Eléctrico

Otro ejemplo con aplicaciones, principalmente, en diseño es en presentar diagramas. Aquí mostramos, en la figura 21, el diagrama de un circuito eléctrico.

5. Interfaces Gráficas

En el tema de entornos gráficos, un claro ejemplo de las figuras geométricas básicas que hemos visto consiste en la creación de componentes visuales para interfaces gráficas. Por ejemplo, en entornos visuales como MS-Windows®, existen componentes como botones, ventanas, menúes, pestañas, barras de proceso, listados, etc.. Internamente, tales componentes se basan en figuras fundamentales como rectángulos, círculos, y líneas rectas. La figura 22 muestra la típica ventana en MS-Windows®.

[IMAGEN]: Figura 22 - Ventana de MS-Windows
Figura 22 - Ventana de MS-Windows

6. Curvas

Ya hemos visto las curvas de Bézier, mencionando las aplicaciones en el diseño de automóviles. En la programación gráfica, estas curvas son aplicadas popularmente para realizar logotipos, fuentes, y otras figuras que no se pueden crear con facilidad como composiciones de figuras básicas. En la siguiente figura 23, mostramos un fantasma diseñado con varias curvas de Bézier.

[IMAGEN]: Figura 23 - Fantasma (Bézier)
Figura 23 - Fantasma (Bézier)

Para facilitar a los lectores el diseño de las curvas de Bézier, presentamos un applet de Java para poder diseñar sus propias curvas interactivamente. Pinche el vértice que se desee mover con el botón izquierdo del ratón. Mantenga pulsado este botón izquierdo y mueva el ratón en la dirección que se desee, para mudar el vértice de la curva. También se permite introducir las coordenadas directamente a través de los cuadros de edición correspondientes a cada uno de los vértices.


Applet para Curvas de Bézier

Nota: Se requiere la máquina virtual de Sun (Sun VM) para poder ejecutar este applet de Java.

Ejercicios

Enlace al paquete de este capítulo.

  1. Escriba un programa que muestre cualquier polígono regular, como se ha descrito en este capítulo. Intente con los siguientes parámetros:
    1. N = 7

      [IMAGEN]: Ejercicio 1a
      Ejercicio 1a
    2. N = 10

      [IMAGEN]: Ejercicio 1b
      Ejercicio 1b
    3. N = 25

      [IMAGEN]: Ejercicio 1c
      Ejercicio 1c

    Elija valores para la resolución y el radio que convengan.

    Como una extensión al algoritmo, podemos agregar un ángulo inicial, ánguloi. Esto nos ayudará para "colocar" el primer vértice donde queramos. Consecuentemente, los demás vértices también serán colocados según el ángulo inicial. Esto implica que la figura será rotada tantos radianes desde la horizontal, que pasa por el centro geométrico del polígono al igual que el de la circunferencia. El algoritmo extendido es el siguiente:

    Polígono_Regular( N, centro, radio, ánguloi )
    1. Crear una lista de N vértices: vértices
    2. alfa ← 2π / N
    3. Bucle: i ← 1 hasta N
    4. vértices[i].x ← centro.x + radio * cos( (i-1)*alfa + ánguloi )
    5. vértices[i].y ← centro.y + radio * sen( (i-1)*alfa + ánguloi )
    6. Dibujar_Polígono( vértices, N )
    7. Terminar.
  2. Escriba un programa para dibujar una estrella. Para esto, seguimos el algoritmo para dibujar un polígono regular. Sin embargo, a la hora de dibujar el polígono, necesitamos implementar nuestra propia función que va dibujando cada línea de un vértice a otro vecino, pero saltándose cada 2,3,4,…,N/2 vértices en nuestra lista. El algoritmo es simplemente el siguiente:

    Estrella( N, centro, radio, ánguloi, salto )
    1. Crear una lista de N vértices: vértices
    2. alfa ← 2π / N
    3. Bucle: i ← 1 hasta N
    4. vértices[i].x ← centro.x + radio * cos( (i-1)*alfa + ánguloi )
    5. vértices[i].y ← centro.y + radio * sen( (i-1)*alfa + ánguloi )
    6. Dibujar_Estrella( vértices, N, salto )
    7. Terminar.

    El algoritmo de Dibujar_Estrella() se basa en manipular los índices de nuestra lista de vértices para así dibujar líneas entre un vértice y el siguiente según el valor de salto. Por lo tanto, nos basaremos en la operación del módulo o resto de una división, descrito como mod. He aquí el algoritmo:

    Dibujar_Estrella( vértices, N, salto )
    1. Bucle: i ← 0 hasta N-1
    2. j ← (i+salto) mod N
    3. Dibujar_Línea( vértices[i+1].x, vértices[i+1].y, vértices[j+1].x, vértices[j+1].y )
    4. Terminar.
    Pruebe con los siguientes valores:
    1. N = 7, salto = 2

      [IMAGEN]: Ejercicio 2a
      Ejercicio 2a
    2. N = 7, salto = 3

      [IMAGEN]: Ejercicio 2b
      Ejercicio 2b
    3. N = 10, salto = 4

      [IMAGEN]: Ejercicio 2c
      Ejercicio 2c
    4. N = 12, salto = 5

      [IMAGEN]: Ejercicio 2d
      Ejercicio 2d
    5. N = 25, salto = 5

      [IMAGEN]: Ejercicio 2e
      Ejercicio 2e
    6. N = 25, salto = 12

      [IMAGEN]: Ejercicio 2f
      Ejercicio 2f
  3. Muestre las estrellas anteriores, pero sólo los perímetros. Es decir, sin que se vean las líneas interiores de la estrella, en sí. Para esto, tenemos que calcular los vértices donde se crucen las líneas al crear la estrella. Las líneas cruzantes indican un punto común para ambas líneas. Esto implica que tenemos que resolver el siguiente sistema de ecuaciones, para averiguar las coordenadas x e y de tal punto común:
    y = (By - Ay) / (Bx - Ax) * (x - Ax) + Ay,
    y = (Dy - Cy) / (Dx - Cx) * (x - Cx) + Cy
    donde tenemos las líneas, o mejor dicho los segmentos, AB y CD.

    [IMAGEN]: Ejercicio 3 - Segmentos cortantes
    Ejercicio 3 - Segmentos cortantes

    Simplificando, obtenemos que,
    x = (m*Ax - Ay - n*Cx + Cy) / (m-n),
    y = m*(x - Ax) + Ay,

    donde,
    m = (By - Ay) / (Bx - Ax), y
    n = (Dy - Cy) / (Dx - Cx)

    [IMAGEN]: Ejercicio 3a
    Ejercicio 3a
    [IMAGEN]: Ejercicio 3b
    Ejercicio 3b
    [IMAGEN]: Ejercicio 3c
    Ejercicio 3c
    [IMAGEN]: Ejercicio 3d
    Ejercicio 3d
    [IMAGEN]: Ejercicio 3e
    Ejercicio 3e
    [IMAGEN]: Ejercicio 3f
    Ejercicio 3f

    Algunas sugerencias para la implementación son:
    1. Calcule los vértices de la estrella, como se ha explicado anteriormente, en el ejercicio #2. Luego, calcule los vértices como se ha explicado previamente, en este ejercicio. Esto implica que nuestra lista de vértices ahora será de 2*N, ya que existe el doble de vértices que en el caso anterior de la estrella. El segmento AB se basa en el vértice i y el siguiente, i+salto, mientras que el segmento CD se crea con el vértice contiguo i+1 y su anterior, i+1-salto. Por supuesto, hay que tener en cuenta que no podemos sobrepasar los valores de los índices. Esto implica que necesitamos "dar la vuelta", por lo que necesitaremos usar la operación del módulo.
    2. En el cálculo de las coordenadas del punto común (x,y), debemos asegurarnos de que m y n sean valores determinables (calculables). Si nos fijamos, cada valor se basa en una división, por lo que es posible que el denominador sea cero. Consecuentemente, m o n no podrían ser calculados. Si esto ocurre, entonces implica que uno de los segmentos es vertical: AB o CD. En este caso, sabemos el valor de x, ya que éste no varía, al ser un segmento vertical; o sea, x = Ax = Bx o x = Cx = Dx. Sabiendo esto, sólo tenemos que calcular el valor de y, a partir del sistema de ecuaciones presentado anteriormente. Se nos presenta un caso similar, si el segmento es horizontal, que ocurriría cuando m o n es cero - cuando el numerador es cero. En este caso, conoceremos el valor de y, por lo que podemos calcular fácilmente el valor de x. Hay que tener en cuenta que surge un problema cuando el denominador de tanto m o n es cero, pero no existe ningún problema si el numerador de m o n es cero, únicamente que podemos simplificar los cálculos.
  4. Cree un programa para mostrar estrellas, como se ha explicado en el ejercicio #3. Esta vez, modificaremos el radio según el valor del ángulo basado en alfa. Es decir, el radio será ahora una función dependiente de una expresión conteniendo alfa. El algoritmo será parecido al siguiente:

    4. vértices[i].x ← centro.x + radio((i-1)*alfa + ánguloi) * cos((i-1)*alfa + ánguloi) 5. vértices[i].y ← centro.y + radio((i-1)*alfa + ánguloi) * sen((i-1)*alfa + ánguloi)
    Pruebe con los siguientes valores y funciones:

    1. N = 25, salto = 11,

      Real radio( t )
      1. a ← 12
      2. b ← 30
      3. x ← a*cos( t ) + b*sen( a*t/2 )
      4. y ← a*cos( t ) - b*sen( a*t/2 )
      5. resultado ← √( (x2+y2) / ((a+b)2 + (a-b)2) )
      6. Terminar( resultado )

      [IMAGEN]: Ejercicio 4a
      Ejercicio 4a
    2. N = 12, salto = 5,

      Real radio( t )
      1. a ← 0,1
      2. b ← 1
      3. x ← 2*a*cos( t ) + b*cos( a*t )
      4. y ← 2*a*sen( t ) - b*cos( a*t )
      5. resultado ← √( (x+y) / ((2*a+b)2 + (2*a-b)2) )
      6. Terminar( resultado )

      [IMAGEN]: Ejercicio 4b
      Ejercicio 4b
  5. Basándose en la figura 17, dibuje otras dos figuras:
    1. Extendiendo la cara agregando un cuerpo con brazos y piernas, y

      [IMAGEN]: Ejercicio 5a
      Ejercicio 5a
    2. Diseñando otra cara expresando otro sentimiento, como por ejemplo: sorpresa, sueño, enfado, perplejidad, etc..

      [IMAGEN]: Ejercicio 5b
      Ejercicio 5b
  6. Usando la técnica de composición, dibuje una casa. Puede basarse en la siguiente ilustración.

    [IMAGEN]: Ejercicio 6
    Ejercicio 6
  7. Cree un programa que recoja datos de un fichero y mostrarlos en dos gráficas en forma de a) barras y b) círculo, junto con algunos resultados estadísticos, si se desea. Por ejemplo, muestre los porcentajes de cada sector del gráfico circular incluyendo una leyenda para indicar la representación de cada color. También se podría calcular e indicar visualmente el promedio, varianza, desviación estándar, etc. en la gráfica de barras.
  8. Cree un programa que permita construir un diagrama de un circuito eléctrico según los datos guardados en un fichero o indicado directamente por el usuario. Por ejemplo, el programa podría crear un circuito con dos generadores eléctricos, cuatro condensadores, tres resistencias, dos inductores, y un interruptor. La complejidad del programa es responsabilidad del programador; se puede crear un programa altamente adaptable a cada tipo de circuito o un programa muy simple que agrega un componente detrás de otro, secuencialmente.

    [IMAGEN]: Ejercicio 8
    Ejercicio 8
    Como una sugerencia, cree funciones para poder dibujar cada componente de forma general. El programa principal invocará cada función para dibujar el componente eléctrico según los datos que describen el circuito. La descripción del circuito puede ser simple, como una cadena de caracteres. Por ejemplo, "GRRCCILGLCCR", donde G indica un generador, R es una resistencia, C es condensador, I es interruptor, y L es inductor.
  9. Diseñe un campo de fútbol. Se puede basar en el siguiente diagrama.

    [IMAGEN]: Ejercicio 9
    Ejercicio 9
  10. Diseñe una figura usando curvas de Bézier. No es necesario que el dibujo se base exclusivamente en curvas de Bézier. Por ejemplo, intente diseñar un logotipo propio o quizá copiarse de uno existente. Otro ejemplo puede ser recrear una letra del abecedario usando estas curvas. Se aconseja hacer uso del applet de Java presentado anteriormente en este capítulo para diseñar curvas de Bézier.

    [IMAGEN]: Ejercicio 10
    Ejercicio 10