Sigo intentando que se generen líneas "perfectas", en este caso quiero que siempre tengan 2 filas y estoy aumentando su cantidad de columnas, pero debido a errores no funciona como debe:

Explicaré el código:
// Determinar ubicación del punto 1:
FilaDePunto1 = 0;
ColumnaDePunto1 = 0;
// Punto 2:
FilaDePunto2 = 1;
ColumnaDePunto2 = NroDelCuadroaColocar+1;Todas las líneas empiezan en el punto 0,0 de los cuadros (u hojas), tienen 2 filas (terminan en la fila 1, contando la 0 son 2) y en cada cuadro se intenta que tengan una columna más. La cantidad de columnas de las líneas en los cuadros sería así:
2 3 4
5 6 7
8 9 10
// Para cálculos:
FilasDeDistancia = FilaDePunto2-FilaDePunto1;
FilasDeLinea = FilasDeDistancia+1;
ColumnasDeDistancia = ColumnaDePunto2-ColumnaDePunto1;
ColumnasDeLinea = ColumnasDeDistancia+1;
// Averiguar la distancia mayor y graficar en función de ella:
// Si hay más columnas que filas o son igual cantidad:
if (Math.abs(ColumnasDeDistancia) >= Math.abs(FilasDeDistancia)) {
PuntosPorFila = Math.floor(ColumnasDeLinea/FilasDeLinea);
// Puntos que no se pudieron repartir equitativamente...
// entre las filas:
Resto = ColumnasDeLinea%FilasDeLinea;
// Para repartirlos estéticamente:
DistanciaDeExtras = (ColumnasDeDistancia+1)/(Resto+1)-1;
ExtraaAgregar = 1;
if (Resto != 0) {
SiguienteFilaConExtra = DistanciaDeExtras;
} else {
// Para evitar que se ponga un punto extra...
// en la fila 0:
SiguienteFilaConExtra = FilaDePunto2+1;
}
ColumnasCompletas = 0;
FilaActual = FilaDePunto1;
// Mientras haya columnas que agregar:
while (ColumnasCompletas < ColumnasDeLinea) {
trace("Aún no se insertaron todas las columnas, van "+ColumnasCompletas);
PuntosEnFila = 0;
// Mientras se deba agregar puntos en la fila:
while (PuntosEnFila < PuntosPorFila) {
trace("Aún no se insertaron los puntos de esta fila, van "+PuntosEnFila);
NroDelCuadraditoaPintar = FilaActual * CuadraditosPorFila + ColumnaDePunto1 + ColumnasCompletas;
ColumnasCompletas++;
PuntosEnFila++;
// Pintar el punto.
}
// Si en esta fila debe agregarse un extra:
if (FilaActual == SiguienteFilaConExtra) {
trace("Agregando extra");
NroDelCuadraditoaPintar = FilaActual * CuadraditosPorFila + ColumnaDePunto1 + ColumnasCompletas;
ColumnasCompletas++;
ParaColorDeCuadradito = new Color(Cuadro_pCuadradito + NroDelCuadraditoaPintar);
ParaColorDeCuadradito.setRGB(ColorDeImagen);
ExtraaAgregar++;
SiguienteFilaConExtra = DistanciaDeExtras*ExtraaAgregar;
}
FilaActual++;
}
// OJO QUE QUIZÁ SE AGREGA UN PUNTO AL FINAL INCLUSO CON RESTO 0 PORQUE ES DISTANCIA/(RESTO+1)
// FALTA FLOOR, CEIL Y TODO ESO
} else {
}En los casos que intento hacer funcionar la cantidad de columnas es igual o mayor a la cantidad de filas así que no hay problema con el 1er if y con el else final vacío.
Con:
PuntosPorFila = Math.floor(ColumnasDeLinea/FilasDeLinea);
se está calculando cuántos puntos tendrá cada fila, sin contar el resto de la división en caso de que ColumnasDeLinea sea impar.
Se calcula el resto y lo siguiente es lo que falla:
Resto = ColumnasDeLinea%FilasDeLinea;
// Para repartirlos estéticamente:
DistanciaDeExtras = ColumnasDeLinea/(Resto+1)-1;
Más adelante sea hace:
if (Resto != 0) {
SiguienteFilaConExtra = DistanciaDeExtras;O sea que cuando hay resto, el punto extra se agrega en donde indique DistanciaDeExtras.
Entonces...
Cuando hay 3 columnas, el resultado debería ser así
**
*o
*
**O sea el extra debería estar en la fila 0 o 1.
Yo hago
DistanciaDeExtras = ColumnasDeLinea/(Resto+1)-1;
O sea en este caso 3/2-1, da 0.5, tendría que quitar los decimales para que sea 0.
Cuando hay 5 columnas, debe haber 2 filas con 2 puntos cada una, pero una de las filas debe tener 1 extra. Es lo mismo, el extra debe ir en la 0 o 1.
5/2-1 = 1.5
Quitando los decimales sería 1.
Cuando hay 7 columnas, sería 7/2-1 = 2.5, ya no se arregla quitando los decimales.
En definitiva tengo algo como C/2 y necesito que siempre de 0 o 1, supongo que no es la fórmula correcta...
Claro, estoy calculando algo parecido a dónde está el centro de la línea, pero no necesito eso, o está mal esto
if (Resto != 0) {
SiguienteFilaConExtra = DistanciaDeExtras;
la fila con el extra no es igual a la columna central.
Aunque sepa que en estos casos siempre va a ser 0 o 1, necesito que la fórmula sirva para más casos.
¿Quizá DistanciaDeExtras debería ser en columnas?
Si tienen alguna duda sobre el problema pregunten.