Diferencia entre revisiones de «PrInf15: Juego: acertar en un polígono»
(→Contenido de la práctica) |
(→Primera versión del juego) |
||
| Línea 57: | Línea 57: | ||
Conociendo ''fill'' e ''inpolygon'' sería ya posible implementar el juego pedido en esta práctica. En la siguiente sección vamos a proporcionar una primera versión del juego. En esta versión, no hay límite de intentos para el jugador. Puedes intentar hacer tú esta versión del juego antes de pasar a la próxima sección. | Conociendo ''fill'' e ''inpolygon'' sería ya posible implementar el juego pedido en esta práctica. En la siguiente sección vamos a proporcionar una primera versión del juego. En esta versión, no hay límite de intentos para el jugador. Puedes intentar hacer tú esta versión del juego antes de pasar a la próxima sección. | ||
=== Primera versión del juego === | === Primera versión del juego === | ||
| + | Como hemos hecho hasta ahora, vamos a estructura el programa en tres partes: | ||
| + | * Entrada de datos | ||
| + | * Algoritmo | ||
| + | * Salida de datos | ||
| + | En este programa, la '''entrada de datos''' es el punto que pedimos al usuario, y que probaremos para ver si está dentro del polígono. El polígono lo incluiremos nosotros directamente en el código fuente, aunque también podríamos pedir los vectores de coordenadas al usuario. Pero por hacer el programa más sencillo para los usuarios, lo fijaremos nosotros en el código fuente. | ||
| + | |||
| + | El '''algoritmo''' consiste en comprobar si el punto está dentro o fuera del polígono. Si está fuera, hay que pedir otro punto al usuario, hasta que acierte con un punto que está dentro. | ||
| + | |||
| + | En cuanto a la '''salida de datos''', cuando el jugador haya acertado le mostraremos un mensaje diciendo el número de intentos que ha necesitado para acertar con un punto dentro del polígono. | ||
== Ejercicio post-práctica == | == Ejercicio post-práctica == | ||
[[Categoría:Prácticas de Informática]] | [[Categoría:Prácticas de Informática]] | ||
Revisión del 23:39 8 ago 2013
| Práctica de Informática | |
|---|---|
| Juego: acertar en un polígono | |
| Práctica anterior | Siguiente práctica |
| Este artículo es un guión de prácticas de Informática | |
En esta práctica vamos a aplicar los conocimientos que hemos adquirido sobre bucles para crear un juego sencillo. Se trata de pedir al usuario un punto, que representa una posición en el plano, y comprobar si el punto está dentro de un polígono. El jugador acierta si proporciona un punto dentro del polígono. Si no acierta dentro del polígono, se le da otra oportunidad. Si alcanza un número límite de intentos, pierde la partida.
Contenido
1 Requisitos previos
Es importante haber realizado las siguientes prácticas antes de realizar esta práctica:
2 Comandos que se aprenderán en esta práctica
| fill | inpolygon |
3 Contenido de la práctica
Al igual que en la práctica anterior, en este caso usaremos un bucle while que tiene una condición compleja. Para implementar esta condición podemos usar tanto un operador lógico, como un break dentro del bucle. En la práctica usaremos un break, y dejaremos como ejercicio post-práctica la implementación que usa un operador lógico y evita el break.
Este programa tiene dos partes complejas, que no hemos programado hasta ahora:
- Representar y dibujar un polígono
- Comprobar si un punto está dentro de un polígono
3.1 Representar y dibujar un polígono
Para representar y dibujar un polígono podemos usar la función fill.
| |
Tarea: | Comprueba cómo se usa la función fill usando help fill |
La función fill acepta tres argumentos de entrada:
- Un vector con las coordenadas x de los vértices del polígono
- Un vector con las coordenadas y de los vértices del polígono
- El color con el que se va a rellenar el polígono
Cada vértice del polígono es un punto en el plano, que tendrá dos coordenadas. Por ejemplo, el punto de la imagen de la derecha tiene como coordenadas [math]x=3[/math] e [math]y=2[/math], y se representa como [math](3,2)[/math]. Si tenemos varios puntos y los unimos, podemos formar un polígono. Por ejemplo, con tres puntos podemos formar un triángulo.
El comando fill se encarga de unir los puntos y dibujar el polígono. Pero tiene una manera peculiar de recibir los puntos que forman el polígono. En vez de recibir una lista de puntos, acepta por un lado la lista de las coordenadas x de esos puntos, y como segundo argumento la lista de las coordenadas y de los mismos puntos. Además, necesita también que especifiquemos el color con el que va a pintar el polígono. Si alguno de estos tres argumentos no es correcto, la función fill no pintará el polígono.
Por ejemplo, el triángulo de la derecha está formado por los tres puntos siguientes: [math]\begin{matrix} P1:& (0, 0)\\ P2:& (0.5, 1)\\ P3:& (1, 0)\\ \end{matrix}[/math] Sin embargo, para poder representarlo con el comando fill tenemos que separar las coordenadas x e y de cada punto. El orden en el que ponemos las coordenadas es importante, ya que tanto el vector x como el vector y tienen que coincidir en sus posiciones (de lo contrario, estaríamos representando un polígono diferente):
x = [0 0.5 1];
y = [0 1 0];
fill(x, y, 'g'); % Lo pinta de color verde, g viene de greenEl comando anterior dibujaría el triángulo relleno de color verde. La forma del triángulo es similar a la mostrada en la figura de la derecha.
3.2 Comprobar si un punto está dentro de un polígono
Para comprobar si un punto dado cae dentro o fuera de un polígono, podemos usar la función inpolygon.
| |
Tarea: | Comprueba cómo se usa la función inpolygon con help inpolygon. ¿Cuántos argumentos de salida y entrada tiene esta función? |
La función inpolygon espera el polígono en el mismo formato que la función fill, es decir, con los valores de las coordenadas x e y en vectores separados. Además, acepta dos números que representan el punto que vamos a comprobar. Por ejemplo, en el triángulo que hemos representado anteriormente, está claro que el punto [math](0.5, 0.5)[/math] cae dentro del polígono, mientras que el punto [math](3,2)[/math] cae fuera. Veamos el resultado de unas pruebas en la línea de comandos de Octave UPM:
>> x = [0 0.5 1];
>> y = [0 1 0];
>> inpolygon(0.5, 0.5, x, y)
ans = 1
>> inpolygon(3, 2, x, y)
ans = 0Como vemos, en el caso del punto que está dentro la función devuelve 1, y en el caso del punto que está fuera ha devuelto 0.
| |
Tarea: | Ejecuta los comandos anteriores. ¿De qué tipo es el valor que devuelve la función inpolygon? |
| |
Tarea: | El punto (0,0) es uno de los vértices del triángulo. Según la función inpolygon, ¿está dentro o fuera del triángulo? |
Conociendo fill e inpolygon sería ya posible implementar el juego pedido en esta práctica. En la siguiente sección vamos a proporcionar una primera versión del juego. En esta versión, no hay límite de intentos para el jugador. Puedes intentar hacer tú esta versión del juego antes de pasar a la próxima sección.
3.3 Primera versión del juego
Como hemos hecho hasta ahora, vamos a estructura el programa en tres partes:
- Entrada de datos
- Algoritmo
- Salida de datos
En este programa, la entrada de datos es el punto que pedimos al usuario, y que probaremos para ver si está dentro del polígono. El polígono lo incluiremos nosotros directamente en el código fuente, aunque también podríamos pedir los vectores de coordenadas al usuario. Pero por hacer el programa más sencillo para los usuarios, lo fijaremos nosotros en el código fuente.
El algoritmo consiste en comprobar si el punto está dentro o fuera del polígono. Si está fuera, hay que pedir otro punto al usuario, hasta que acierte con un punto que está dentro.
En cuanto a la salida de datos, cuando el jugador haya acertado le mostraremos un mensaje diciendo el número de intentos que ha necesitado para acertar con un punto dentro del polígono.