martes, 18 de agosto de 2015

Crear un contorno en cualquier tipo de cuadrado.



Últimamente estoy viajando en el transporte publico de la ciudad de México y me he puesto a escribir un guión, script o boceto para crear un juego de laberinto, recuerdo que de niño quería hacer un juego por el estilo, en donde el personaje mientras encontraba la salida tenia aventuras, encontrando trampas, armas y aprendiendo habilidades en su camino.

Pensando en mi niñez recordé que había olvidado ciertas partes de mi creatividad y comencé a escribir a poco un esbozo en papel.

Y estaré publicando mis avances y pequeñas demostraciones.

Estaba pensando que "Laberinto" debe tener un algoritmo de creación propia pero aún sigo en proceso de creación del auto generador basado en rejillas.

El proceso de crear una rejilla seria de esta forma.

Imaginemos cualquier tipo de rejilla o cuadrado con un valor de cualquier cantidad por ejemplo $7$ recordando que (lado * lado) nos da $7*7 = 49$ y es la formula para hacer un cuadrado, en donde nuestra rejilla vale 7 filas con 7 columnas y eso nos dará un total de 49 secciones.

Tomemos una variable llamada $n$ en donde $n=7$.

Variable: $n=7$ lo que seria $n * n$ lados.

1234567
891011121314
15161718192021
22232425262728
29303132333435
36373839404142
42444546474849

En este caso nosotros necesitamos seleccionar el contorno de la rejilla, osea los números.

1234567
814
1521
2228
2935
3642
43444546474849

En donde el esbozo del algoritmo de creación de un contorno de cualquier cuadrado con $N$ dimensiones se realizaría con los siguientes pasos, en este ejemplo.

El valor de $n=7$.

  1. Generar la sentencia en donde $n=0$, sumar $n+1=1, n+1=2, n+1=3, n+1=4, n+1=5, n+1=6$ hasta llegar a $\sqrt{n^2}=7$, e imprimir cada número en cada columna de la primera fila.
  2. Segunda fila la operación $(\sqrt{n^2}) +1= 8$ y agregar $2(\sqrt{n^2}) = 14$.
  3. Tercera fila la operación $2(\sqrt{n^2}+1)=15 $ y agregar $3(\sqrt{n^2}) = 21$.
  4. Cuarta fila la operación $3(\sqrt{n^2})+1 = 22$ y agregar $4(\sqrt{n^2}) = 28$.
  5. Quinta fila la operación $4(\sqrt{n^2})+1 = 29$ y agregar $5(\sqrt{n^2}) = 35$.
  6. Sexta fila la operación $5(\sqrt{n^2})+1 = 36$ y agregar $6(\sqrt{n^2}) = 42$.
  7. En la séptima fila la operación obvio nos va a dar $6(\sqrt{n^2})+1 = 43$ pero a continuación agregar $+1$ a cada columna desde $6(\sqrt{n^2})+2 = 44$, $6(\sqrt{n^2})+3 = 45$, $6(\sqrt{n^2})+4 = 46$, $6(\sqrt{n^2})+5 = 47$, hasta $6(\sqrt{n^2})+6 = 48$ y llegar a una operación no mayor a $7(\sqrt{n^2}) = 49$, e imprimir cada resultado en la casilla respectiva de cada número.
  8. Hay que tomar en cuenta los siguientes hechos lógicos, si se tratara de una rejilla 8, 30 o 245 se siguen estos pasos:
    1. Si se trata de una rejilla de 8, 30 o 245 unidades, habría 8, 30 o 245 filas y columnas en donde desde la segunda columna (segmento n+1 = 2) tendría que llegar a $\sqrt{n^2}$ en donde $n$ serian 8, 30 o 245 en dichos casos.
    2. Las filas tendrían la misma medida 8, 30 o 245 filas totales.
    3. Desde la ultima fila $n(\sqrt{n^2})+1$ comienza a sumarse $+1$ sucesivamente tantas veces sea el valor de $n$ siendo no mayor a $n(\sqrt{n^2})$ que se le aya asignado en los casas de $8^2= 64$, $30^2=900 $, $245^2=60025$ mostrando resultados como ejemplos.
El algoritmo se veria de la siguiente forma.

$n+1=1$$n+1=2$$n+1=3$$n+1=4$$n+1=5$$n+1=6$$1(\sqrt{n^2})$
$1(\sqrt{n^2}) +1$$2(\sqrt{n^2})$
$2(\sqrt{n^2})+1$$3(\sqrt{n^2})$
$3(\sqrt{n^2})+1$$4(\sqrt{n^2})$
$4(\sqrt{n^2})+1$$5(\sqrt{n^2})$
$5(\sqrt{n^2})+1$$6(\sqrt{n^2})$
$6(\sqrt{n^2})+1$$6(\sqrt{n^2})+2$$6(\sqrt{n^2})+3$$6(\sqrt{n^2})+4$$6(\sqrt{n^2})+5$$6(\sqrt{n^2})+6$$7(\sqrt{n^2})$

A continuación, la magia(razón) se encuentra en si imaginamos cada numero mostrado y este se colorearía de un color distinto a blanco en una rejilla transparente/blanca, nos daríamos cuenta que cualquier cubo de cualquier proporción se distingue un contorno exacto  aquí es donde se realiza el tuco.

1234567
814
1521
2228
2935
3642
43444546474849

Dudas aclaraciones mejoras por favor no duden en escribir, gracias.