Autor Tema: ¿Cuando un cuadradito es parte de un cuadrado?

0 Usuarios y 1 Visitante están viendo este tema.

22 Marzo, 2026, 09:06 am
Leído 563 veces

Tachikomaia

  • $$\Large \color{#5b61b3}\pi\,\pi\,\pi\,\pi\,\pi$$
  • Mensajes: 1,297
  • País: uy
  • Karma: +0/-0
  • Sexo: Masculino
Quiero mejorar este código:
Código: [Seleccionar]
function InsertarCuadros () {
AjustarVariables();
NroDelCuadroaColocar = 0;
// Sus columnas y filas se cuentan desde 0 también:
ColumnaDeCuadro = 0;
FilaDeCuadro = 0;
do {
Cuadro_ = "Cuadro"+NroDelCuadroaColocar;
attachMovie("sCuadro", Cuadro_, NroDelCuadroaColocar);
setProperty (Cuadro_, _x, LargoDeCuadros*ColumnaDeCuadro+ColumnaDeCuadro*LargoDeCuadraditos);
setProperty (Cuadro_, _y, LargoDeCuadros*FilaDeCuadro+FilaDeCuadro*LargoDeCuadraditos);
ColumnaDeCuadro++;
if (ColumnaDeCuadro == CuadrosPorFila) {
ColumnaDeCuadro = 0;
FilaDeCuadro++;
}
// Se agregarán y distribuirán cuadraditos en el cuadro...
// recién agregado, numerándolos del mismo modo:
NroDelCuadraditoaColocar = 0;
// Sus columnas y filas se cuentan desde 0:
ColumnaDeCuadradito = 0;
FilaDeCuadradito = 0;
// p representa un ".", "punto".
Cuadro_pCuadradito = Cuadro_+".Cuadradito";
if (Modo == "Cuadrados" or Modo == "Rectangulos") {
// Inicialmente los cuadraditos del cuadro tendrán...
// el mismo color:
ColorDelCuadro = PosiblesColores[random(PosiblesColores.length)];
// trace("ColorDelCuadro: "+ColorDelCuadro);
}
do {
eval(Cuadro_).attachMovie("sCuadradito", "Cuadradito"+NroDelCuadraditoaColocar, NroDelCuadraditoaColocar);
Cuadro_pCuadradito_ = Cuadro_pCuadradito+NroDelCuadraditoaColocar;
setProperty (Cuadro_pCuadradito_, _x, ColumnaDeCuadradito*LargoDeCuadraditos);
setProperty (Cuadro_pCuadradito_, _y, FilaDeCuadradito*LargoDeCuadraditos);
setProperty (Cuadro_pCuadradito_, _width, LargoDeCuadraditos);
setProperty (Cuadro_pCuadradito_, _height, LargoDeCuadraditos);
ColumnaDeCuadradito++;
if (ColumnaDeCuadradito == CuadraditosPorFila) {
ColumnaDeCuadradito = 0;
FilaDeCuadradito++;
}
if (Modo == "MuchoAzar") {
ParaColorDeCuadradito = new Color(Cuadro_pCuadradito_);
ParaColorDeCuadradito.setRGB(PosiblesColores[random(PosiblesColores.length)]);
} else if (Modo == "Cuadrados" or Modo == "Rectangulos") {
ParaColorDeCuadradito = new Color(Cuadro_pCuadradito_);
ParaColorDeCuadradito.setRGB(ColorDelCuadro);
}
NroDelCuadraditoaColocar++;
} while (NroDelCuadraditoaColocar<Cuadraditos);
// Un ID usado en el botón de los cuadros:
set (Cuadro_+".ID", NroDelCuadroaColocar);
// El botón para transmitir y mutar queda del mismo...
// tamaño que el cuadro:
setProperty (Cuadro_+".Boton", _width, LargoDeCuadros);
setProperty (Cuadro_+".Boton", _height, LargoDeCuadros);
if (Modo == "Cuadrados") {
GenerarCuadrados();
} else if (Modo == "Rectangulos") {
GenerarRectangulos();
}
NroDelCuadroaColocar++;
} while (NroDelCuadroaColocar<Cuadros);
if (Modo == "AzarrazA") {
RepintarCuadrosAzarrazA();
} else if (Modo == "AzarAzar") {
RepintarCuadrosAzarAzar();
}
// delete ColorDelCuadro;
Fondo.CargaParaNuevosDibujos = 0;
}

Uno de los defectos es que si el modo es generar cuadrados o rectángulos asigna un color a todos los cuadraditos y luego asigna otro color a los que formarán parte del cuadrado o rectángulo a generar, o sea, esos cuadraditos se pintan 2 veces.
Ya pensé una mejora, sería algo así:
Código: [Seleccionar]
function InsertarCuadros () {
AjustarVariables();
NroDelCuadroaColocar = 0;
// Sus columnas y filas se cuentan desde 0 también:
ColumnaDeCuadro = 0;
FilaDeCuadro = 0;
do {
Cuadro_ = "Cuadro"+NroDelCuadroaColocar;
attachMovie("sCuadro", Cuadro_, NroDelCuadroaColocar);
setProperty (Cuadro_, _x, LargoDeCuadros*ColumnaDeCuadro+ColumnaDeCuadro*LargoDeCuadraditos);
setProperty (Cuadro_, _y, LargoDeCuadros*FilaDeCuadro+FilaDeCuadro*LargoDeCuadraditos);
ColumnaDeCuadro++;
if (ColumnaDeCuadro == CuadrosPorFila) {
ColumnaDeCuadro = 0;
FilaDeCuadro++;
}
// Se agregarán y distribuirán cuadraditos en el cuadro...
// recién agregado, numerándolos del mismo modo:
NroDelCuadraditoaColocar = 0;
// Sus columnas y filas se cuentan desde 0:
ColumnaDeCuadradito = 0;
FilaDeCuadradito = 0;
// p representa un ".", "punto".
Cuadro_pCuadradito = Cuadro_+".Cuadradito";
if (Modo == "Cuadrados") {
// Inicialmente los cuadraditos del cuadro tendrán...
// el mismo color:
ColorDelCuadro = PosiblesColores[random(PosiblesColores.length)];
// Elegir un color distinto al color del cuadro:
do {
ColorDeImagen = PosiblesColores[random(PosiblesColores.length)];
} while (ColorDelCuadro == ColorDeImagen);
// Determinar su base y altura:
LargoDeImagen = random(MaxLargoDeImagenes)+1;
// Determinar dónde empieza:
FilaInicialDeImagen = random(CuadraditosPorFila-LargoDeImagen+1);
ColInicialDeImagen = random(CuadraditosPorFila-LargoDeImagen+1);
FilaFinalDeImagen = FilaInicialDeImagen+LargoDeImagen-1;
ColFinalDeImagen = ColInicialDeImagen+LargoDeImagen-1;
// Pintar los cuadraditos de esa imagen:
} else if (Modo == "Rectangulos") {
// Inicialmente los cuadraditos del cuadro tendrán...
// el mismo color:
ColorDelCuadro = PosiblesColores[random(PosiblesColores.length)];
// Elegir un color distinto al color del cuadro:
do {
ColorDeImagen = PosiblesColores[random(PosiblesColores.length)];
} while (ColorDelCuadro == ColorDeImagen);
// Determinar su base y altura evitando que sean iguales:
LargoDeImagen = random(MaxLargoDeImagenes+1)+1;
do {
AltoDeImagen = random(MaxLargoDeImagenes+1)+1;
} while (AltoDeImagen == LargoDeImagen);
// Determinar dónde empieza:
FilaInicialDeImagen = random(CuadraditosPorFila-LargoDeImagen+1);
ColInicialDeImagen = random(CuadraditosPorFila-AltoDeImagen+1);
FilaFinalDeImagen = FilaInicialDeImagen+LargoDeImagen-1;
ColFinalDeImagen = ColInicialDeImagen+AltoDeImagen-1;
// Pintar los cuadraditos de esa imagen:
}
do {
eval(Cuadro_).attachMovie("sCuadradito", "Cuadradito"+NroDelCuadraditoaColocar, NroDelCuadraditoaColocar);
Cuadro_pCuadradito_ = Cuadro_pCuadradito+NroDelCuadraditoaColocar;
setProperty (Cuadro_pCuadradito_, _x, ColumnaDeCuadradito*LargoDeCuadraditos);
setProperty (Cuadro_pCuadradito_, _y, FilaDeCuadradito*LargoDeCuadraditos);
setProperty (Cuadro_pCuadradito_, _width, LargoDeCuadraditos);
setProperty (Cuadro_pCuadradito_, _height, LargoDeCuadraditos);
ColumnaDeCuadradito++;
if (ColumnaDeCuadradito == CuadraditosPorFila) {
ColumnaDeCuadradito = 0;
FilaDeCuadradito++;
}
ParaColorDeCuadradito = new Color(Cuadro_pCuadradito_);
if (Modo == "MuchoAzar") {
ParaColorDeCuadradito.setRGB(PosiblesColores[random(PosiblesColores.length)]);
} else if (Modo == "Cuadrados") {
//      si el cuadradito es parte del cuadrado
//        asignarle el color de la imagen
ParaColorDeCuadradito.setRGB(ColorDeImagen));
//      sino
//        asignarle el color de fondo
ParaColorDeCuadradito.setRGB(ColorDelCuadro));
} else if (Modo == "Rectangulos") {
//      si el cuadradito es parte del rectángulo
//        asignarle el color de la imagen
ParaColorDeCuadradito.setRGB(ColorDeImagen));
//      sino
//        asignarle el color de fondo
ParaColorDeCuadradito.setRGB(ColorDelCuadro));
} else if (Modo == "AzarrazA") {
//      si el cuadradito está a la izquierda o en la columna central
//        asignarle un color al azar
ParaColorDeCuadradito.setRGB(PosiblesColores[random(PosiblesColores.length)]);
//      sino
//        asignarle el color del cuadradito simétrico
} else if (Modo == "AzarAzar") {
//      si el cuadradito está arriba de la fila central o en ella
ParaColorDeCuadradito.setRGB(PosiblesColores[random(PosiblesColores.length)]);
//      sino
//        asignarle el color del cuadradito simétrico
}
NroDelCuadraditoaColocar++;
} while (NroDelCuadraditoaColocar<Cuadraditos);
// Un ID usado en el botón de los cuadros:
set (Cuadro_+".ID", NroDelCuadroaColocar);
// El botón para transmitir y mutar queda del mismo...
// tamaño que el cuadro:
setProperty (Cuadro_+".Boton", _width, LargoDeCuadros);
setProperty (Cuadro_+".Boton", _height, LargoDeCuadros);
NroDelCuadroaColocar++;
} while (NroDelCuadroaColocar<Cuadros);
Fondo.CargaParaNuevosDibujos = 0;
}

Claro que me faltan partes.

//      si el cuadradito es parte del cuadrado

¿Qué debería poner ahí? Qué condiciones, qué código.

Las variables relevantes supongo que son:

NroDelCuadraditoaColocar:
El nro de cuadradito que queremos saber si es parte del cuadrado o no.
Están en un cuadro numerados así
0 1 2 3
4 5 6 7
etc
el largo y ancho del cuadro puede variar, pero siempre son iguales entre sí.
Si les resulta más cómodo pueden lamar:
- hoja o plano a los cuadros
- cuadrado a los cuadrados
- puntos a los cuadraditos
La pregunta entonces sería cuando un punto está en un cuadrado.
Y la hoja está dividida en partes, cuadros, en cada uno hay un cuadrado.

ColumnaDeCuadradito:
FilaDeCuadradito:
Calculadas con fórmulas que tengo por ahí, siempre las pierdo >__<

LargoDeImagen:
FilaInicialDeImagen:
ColInicialDeImagen:
FilaFinalDeImagen:
ColFinalDeImagen:
Todo eso son datos del cuadrado. Col es columna.

A ver...
si ColumnaDeCuadradito >= ColInicialDeImagen && ColumnaDeCuadradito <= ColFinalDeImagen && FilaDeCuadradito >= FilaInicialDeImagen && FilaDeCuadradito <= FilaFinalDeImagen

¿Es eso?

¿se puede hacer de forma más eficiente?