Diferencia entre revisiones de «PrInf19: Juego: doble o nada versión masiva»

De MateWiki
Saltar a: navegación, buscar
(Función doble o nada)
(Función doble o nada)
Línea 32: Línea 32:
 
   dentro = inpolygon(xn, yn, x, y);   
 
   dentro = inpolygon(xn, yn, x, y);   
 
end}}
 
end}}
 
 
{{ Tarea | Termina la función usando la plantilla anterior, y guarda en un fichero de nombre ''puntoSeQuedaDentro.m''.}}
 
{{ Tarea | Termina la función usando la plantilla anterior, y guarda en un fichero de nombre ''puntoSeQuedaDentro.m''.}}
 +
Recuerda que el algoritmo consiste en los siguientes pasos:
 +
# Busca el vértice más cercano
 +
# El imán se repele hasta un punto situado al doble de distancia de ese vértice
 +
# Si ha salido, ya no se continúa probando
 +
# Si hemos alcanzado el límite de saltos, no seguimos probando
 +
# Si está todavía dentro y no hemos alcanzado el límite de saltos, volvemos al primer punto.

Revisión del 19:38 8 oct 2013

Práctica de Informática
Juego: doble o nada
Práctica anterior Siguiente práctica
Este artículo es un guión de prácticas de Informática


Warning.png Este artículo está en versión beta. El autor de este artículo no lo ha terminado todavía, por favor no lo edites hasta que elimine este mensaje.

En esta práctica vamos a continuar con el juego anterior, pero vamos a realizar una implementación masiva. Es decir, en vez de probar con un solo punto, vamos a probar con miles de puntos generados aleatoriamente, y vamos a comprobar si cada uno de estos puntos acaba siendo repelido fuera del triángulo, o permanece dentro del triángulo. Una vez que hayamos realizado esta comprobación, dibujaremos las posiciones iniciales de los puntos que permanecen dentro del triángulo, para acabar generando una inquietante figura.

1 Requisitos previos

Antes de realizar esta práctica, es necesario haber realizado la práctica anterior, ya que vamos a reutilizar el código desarrollado en esa práctica:

2 Función doble o nada

El primer paso será crear una función que realice el juego de la práctica anterior. Esta función acepta como argumentos de entrada el punto a probar y los vértices del polígono. La función devuelve true si el punto continúa dentro del polígono tras llegar al límite de saltos, y devuelve false si el punto es repelido fuera del polígono. Esta función es muy similar al programa que hemos realizado en la práctica anterior, con la única excepción de que no dibuja nada y solo devuelve verdadero o falso.

Para facilitar el desarrollo de esta función, puedes utilizar la siguiente plantilla

function dentro = puntoSeQuedaDentro(p, x, y)
  nSaltos = 4;
  % Coordenadas del punto inicial
  xp = p(1);
  yp = p(2);
  xn = xp; % xn es cada una de las posiciones x por donde va pasando el iman
  yn = yp;
  % -------------------------------
  % TU CODIGO AQUI
  % En esta parte del codigo hay que hacer que el iman salte como maximo cuatro veces
  % Si sale del poligono, no hay que continuar saltando
  % Tiene que dibujar cada posicion en color magenta, con el siguiente comando
  % plot(xn,yn,'om','LineWidth',8, 'MarkerSize', 14); 
  %
  % Estos comentarios se pueden eliminar del código antes de enviar la solución
  % -------------------------------
  dentro = inpolygon(xn, yn, x, y);  
end


Lapiz.png Tarea: Termina la función usando la plantilla anterior, y guarda en un fichero de nombre puntoSeQuedaDentro.m.


Recuerda que el algoritmo consiste en los siguientes pasos:

  1. Busca el vértice más cercano
  2. El imán se repele hasta un punto situado al doble de distancia de ese vértice
  3. Si ha salido, ya no se continúa probando
  4. Si hemos alcanzado el límite de saltos, no seguimos probando
  5. Si está todavía dentro y no hemos alcanzado el límite de saltos, volvemos al primer punto.