Lo había intentado sin recurrir a filas ni columnas y como luego se me ocurrió una idea seguí intentándolo pero sigo estancado >__< Quisiera la fórmula sin recurrir a filas ni columnas. Les explico lo que tengo:
Se establece la cantidad de columnas y filas, pongamos que 4.
Se calcula la columna central izquierda y la derecha, aquí unos ejemplos:
Si hay 4 columnas: xIDx
Si hay 5: xIxDx
En este programa las tengo numeradas desde 0, las establezco así:
ColumnaCentralIzquierda = Math.floor((CuadraditosPorFila-1)/2);
ColumnaCentralDerecha = Math.ceil((CuadraditosPorFila-1)/2);
Por fila es igual que por columna. No sé si esas fórmulas están bien, tengo una duda más grande.
Los casilleros se van pintando. El 1, el 2, etc, pero cuando la columna de uno no es menor que la derecha central, tiene que captar el color del casillero opuesto, simétrico.
Ahí es donde más me lío. Si tengo:
0123
4567
y se va a pintar el 2, sé que el opuesto es el 1, es decir debo restarle 1, y si es el 4 debo restarle 2. Creo que tiene que ver con cual es el casillero central de la fila, el cual varía según la fila. Lo calculo así:
CuadraditoCentralDeLaFila = (_level0.CuadraditosPorFila*Fila+1+_level0.CuadraditosPorFila*(Fila+1))/2;
De nuevo, no sé si la fórmula está bien, mi principal lío es que no entiendo cómo usar esa variable. Si la distancia entre el casillero a pintar y el centro es X, debo restarle X al centro y me da el jodido casillero opuesto, pero algo estoy haciendo mal:
CuadraditoReflejo = Math.ceil(CuadraditosColocados-CuadraditoCentralDeLaFila);
ESO ¿qué tiene mal? Si es que es eso y no otra cosa, pero eso para empezar.
Como dije, pongamos que tenemos:
0123
4567
Se debe pintar el 2, por lo que debe tomarse el color del 1, para lo cual hay que usar la fórmula que de 1 a partir del 2.
Casillero a pintar - casillero central = 2-1.5 = 0.5 Le pongo ceil y me da 1, bien.
Ahora el 3:
Casillero a pintar - casillero central = 3-1.5 = 1.5 Le pongo ceil y me da 2. Pero tiene que dar 0
¿es que tengo que hacer 2 restas? Como:
DistanciaAlCentral = Casillero a pintar - central
CasilleroOpuesto = central - distancia
¿No se puede hacer con un *2 o algo así en vez de hacer 2 restas? Tengo un lío bárbaro.
Tal vez es más fácil calcularlo usando columnas y filas pero quiero entender cómo sería de este modo. Les dejo el código resumido y algunos datos, no sé qué está mal.
Primero ocurre esto:
CuadraditosPorFila = 4;
// Columna izquierda más cercana al centro...
// contándolas desde 0:
ColumnaCentralIzquierda = Math.floor((CuadraditosPorFila-1)/2);
// Lo mismo pero derecha:
ColumnaCentralDerecha = Math.ceil((CuadraditosPorFila-1)/2);
MaxCuadradito = CuadraditosPorFila*CuadraditosPorFila;Ahora ocurre esto:
// Agregar, distribuir cuadraditos y asignarles un color,
// de modo que queden coloreados simétricamente
// (espejo así | ):
CuadraditosColocados = 0;
Columna = 0;
Fila = 0;
CuadraditoCentralDeLaFila = (_level0.CuadraditosPorFila*Fila+1+_level0.CuadraditosPorFila*(Fila+1))/2;
trace ("Asignando colores para un nuevo dibujo");
do {
CuadraditosColocados = CuadraditosColocados+1;
// Si el cuadradito está a la izquierda o en el centro:
if (Columna < _level0.ColumnaCentralDerecha) {
// Asignar color al azar:
} else {
trace ("Tiene simetría el "+CuadraditosColocados);
// Asignar el mismo color que su simétrico:
CuadraditoReflejo = Math.ceil(CuadraditosColocados-CuadraditoCentralDeLaFila);
trace ("Es "+CuadraditoReflejo);
trace ("CuadraditoCentralDeLaFila es "+CuadraditoCentralDeLaFila);
}
Columna++;
if (Columna == _level0.CuadraditosPorFila) {
Columna = 0;
Fila = Fila+1;
CuadraditoCentralDeLaFila = (_level0.CuadraditosPorFila*Fila+1+_level0.CuadraditosPorFila*(Fila+1))/2;
}
} while (CuadraditosColocados<_level0.MaxCuadradito);Resultado (tiene algo de azar):

Como ven, la parte derecha de cada dibujo (separados con línea verde) es igual a su parte superior pero al revés. O sea, tremendo lío, muchos errores a corregir, pero iré paso a paso.
Esto son informaciones que da el programa:
Tiene simetría el 3
Es 1
CuadraditoCentralDeLaFila es 2.5
Tiene simetría el 4
Es 2
CuadraditoCentralDeLaFila es 2.5
Tiene simetría el 7
Es 1
CuadraditoCentralDeLaFila es 6.5
Tiene simetría el 8
Es 2
CuadraditoCentralDeLaFila es 6.5
Lo que dice son los cuadraditos que deben captar el color de su opuesto, dice que el 3, el 4, 7 y 8 deben captarlo, eso está bien.
Donde dice "Es" se refiere a cual se consideró el opuesto, lo cual está mal hecho, la conclusión es falsa.
A CuadraditoCentralDeLaFila por lo visto debo restarle 1, lo que pasa que en otro programa tengo las filas contándolas desde 1 y acá es desde 0, por eso me entrevero, en algunos casos conviene de un modo y en otros del otro...
Haré los arreglos que pueda pero lo 1ero que necesito es esa fórmula que marqué con negrita.