elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


Tema destacado: Guía actualizada para evitar que un ransomware ataque tu empresa


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Mostrar dibujos variándolos desde izquierda arriba, empezando por una _|
0 Usuarios y 2 Visitantes están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Mostrar dibujos variándolos desde izquierda arriba, empezando por una _|  (Leído 278 veces)
Tachikomaia


Desconectado Desconectado

Mensajes: 1.518


Hackentifiko!


Ver Perfil
Mostrar dibujos variándolos desde izquierda arriba, empezando por una _|
« en: 30 Marzo 2025, 03:40 am »

No entiendo por qué me resulta tan complicado.

Los dibujos empiezan teniendo 3*3 cuadraditos, siempre los números serán iguales entre sí.

Como regla he puesto que, si son X*X, se muestren (X-1)*(X-1) dibujos en la pantalla, o sea que al inicio serían 2*2.

Una muestra:

Lo gris son separadores. Hay 2*2 dibujos o cuadros, de 3*3 cuadraditos cada uno. Son blancos o negros.

Hay 2^(3*3) dibujos posibles, creo, no importa si está mal el cálculo. Esa cantidad se quiere que se divida en 4, para que cada cuadro muestre la misma cantidad de dibujos.

Los dibujos se pueden representar mediante un número, especialmente uno binario. Como en Flash el negro es 000000, decido que el 0 represente negro y 1 blanco.

Quiero que se vayan mostrando dibujos en orden desde todo blanco, o sea, si los dibujos fuesen de 2*2 sería:
1er dibujo del 1er cuadro: 1111
2ndo dibujo de ese cuadro: 1110
3ero: 1101
el número va bajando, sin sobresaltos.

También quiero que inicialmente los dibujos varíen desde arriba e izquierda, por lo que, supongo, me conviene numerar a los cuadraditos así:
8 7 6
5 4 3
2 1 0
Así que el dibujo correspondiente a 111111110 sería:
0 1 1
1 1 1
1 1 1
O sea ¡al revés!

El número debe variar normal, pero debe aplicarse al revés, creo.

Creo que ya había logrado eso. Entonces quise que en vez de mostrarse todos los dibujos, se empiece por este:
1 1 0
1 1 0
0 0 0
No viene al caso por qué. La cosa es que se mostrarán menos dibujos, la cantidad a dividir en cuadros es distinta. Hay que averiguar qué cantidad es.

Hago esto:
Código
  1. DibujoEnBinario = "";
  2. NroDelCaracter = Cuadraditos;
  3. AnteriorCaracteraPintar = Cuadraditos-CuadraditosPorFila;
  4. // Esto genera la |
  5. do {
  6. NroDelCaracter--;
  7. if (NroDelCaracter != AnteriorCaracteraPintar) {
  8. DibujoEnBinario = DibujoEnBinario+1;
  9. } else {
  10. DibujoEnBinario = DibujoEnBinario+0;
  11. AnteriorCaracteraPintar = AnteriorCaracteraPintar-CuadraditosPorFila;
  12. }
  13. } while (NroDelCaracter > CuadraditosPorFila);
  14. // Esto la _
  15. do {
  16. NroDelCaracter--;
  17. DibujoEnBinario = DibujoEnBinario+0;
  18. } while (NroDelCaracter > 0);
  19. trace("DibujoEnBinario (_|): "+DibujoEnBinario);

Me da: DibujoEnBinario (_|): 110110000
Está bien.

Lo convierto a decimal, porque ese es el número de dibujo más grande que se mostrará, esa esa la cantidad que quiero repartir en los cuadros.

Código
  1. DibujoaMostrar = 0;
  2. do {
  3. DibujoaMostrar = DibujoaMostrar+(Number(DibujoEnBinario.charat(NroDelCaracter))*Math.pow(2, DibujoEnBinario.length-1-NroDelCaracter));
  4. NroDelCaracter++;
  5. } while (NroDelCaracter < Cuadraditos);
  6. DibujoaMostrar = Number(DibujoaMostrar);

Me da 432.

Código
  1. Disminucion = Math.floor(DibujoaMostrar/Cuadros);
  2. // Se llama disminución porque se comenzará mostrando...
  3. // el dibujo que según el modo conque los numero,
  4. // es el último, y se irá disminuyendo.

No creo que el error esté ahí, tampoco.

Pero como vieron en la imagen, el 1er cuadro (arriba izquierda, los cuadros están numerados normal) no muestra una _| sino una
 _
|

¿Qué estoy haciendo mal?

Código
  1. // Generador de dibujos.
  2. //
  3. // Se insertarán cuadros numerados así:
  4. // 0 1
  5. // 2 3
  6. // En cada uno se insertarán cuadraditos numerados al revés (ver...
  7. // Por qué cuadraditos numerados inversamente.txt por detalles).
  8. //
  9. // Usada en InsertarCuadros sólo 1 vez
  10. // (ergo podría no ser una función, pero por ahora simplifica):
  11. function AjustarVariables () {
  12. Cuadros = CuadrosPorFila*CuadrosPorFila;
  13. MaxCuadro = Cuadros-1;
  14. Cuadraditos = CuadraditosPorFila*CuadraditosPorFila;
  15. MaxCuadradito = Cuadraditos-1;
  16. LargoDeCuadraditos = 384/(CuadraditosPorFila*CuadrosPorFila+CuadrosPorFila-1);
  17. LargoDeCuadros = CuadraditosPorFila*LargoDeCuadraditos;
  18. // Esto es para que el 1er dibujo sea una |_ porque es el...
  19. // 1ero que tiene algún cuadradito pintado en cada fila y...
  20. // columna (en realidad el 1ero es el que tiene despintado el punto de unión, pero hay poca diferencia)
  21. // esto es para evitar que se salteén montones de dibujos.
  22. // Se averigua su número representante:
  23. DibujoEnBinario = "";
  24. NroDelCaracter = Cuadraditos;
  25. AnteriorCaracteraPintar = Cuadraditos-CuadraditosPorFila;
  26. // Esto genera la |
  27. do {
  28. NroDelCaracter--;
  29. if (NroDelCaracter != AnteriorCaracteraPintar) {
  30. DibujoEnBinario = DibujoEnBinario+1;
  31. } else {
  32. DibujoEnBinario = DibujoEnBinario+0;
  33. AnteriorCaracteraPintar = AnteriorCaracteraPintar-CuadraditosPorFila;
  34. }
  35. } while (NroDelCaracter > CuadraditosPorFila);
  36. // Esto la _
  37. do {
  38. NroDelCaracter--;
  39. DibujoEnBinario = DibujoEnBinario+0;
  40. } while (NroDelCaracter > 0);
  41. trace("DibujoEnBinario (_|): "+DibujoEnBinario);
  42. // Convertirlo en decimal:
  43. DibujoaMostrar = 0;
  44. do {
  45. DibujoaMostrar = DibujoaMostrar+(Number(DibujoEnBinario.charat(NroDelCaracter))*Math.pow(2, DibujoEnBinario.length-1-NroDelCaracter));
  46. NroDelCaracter++;
  47. } while (NroDelCaracter < Cuadraditos);
  48. DibujoaMostrar = Number(DibujoaMostrar);
  49. // Esa cantidad se dividirá según la cantidad de cuadros,
  50. // de modo que cada cuadro mostrará la misma cantidad de...
  51. // dibujos, pero distintos a los de otros cuadros:
  52. Disminucion = Math.floor(DibujoaMostrar/Cuadros);
  53. // Se llama disminución porque se comenzará mostrando...
  54. // el dibujo que según el modo conque los numero,
  55. // es el último, y se irá disminuyendo:
  56. // DibujoaMostrar = DibujoaMostrar-1;
  57. trace("DibujoaMostrar: "+DibujoaMostrar);
  58. }
  59. // Usada en InsertarCuadros una vez (totalmente innecesaria):
  60. function ConvertiraBinarioInverso (numero) {
  61. trace(numero);
  62. // Averiguar cómo es en binario:
  63. DibujoEnBinario = "";
  64. while (numero>0) {
  65. DibujoEnBinario = DibujoEnBinario+numero%2;
  66. numero = Math.floor(numero/2);
  67. }
  68. // Agregar 0s a DibujoEnBinario si hacen falta:
  69. while (DibujoEnBinario.length<Cuadraditos) {
  70. DibujoEnBinario = DibujoEnBinario+0;
  71. }
  72. trace("DibujoEnBinario: "+DibujoEnBinario);
  73. }
  74. // Usada al inicio y cuando aumenta la cantidad de cuadraditos por fila:
  75. function InsertarCuadros () {
  76. AjustarVariables();
  77. NroDelCuadroaColocar = 0;
  78. // Sus columnas y filas se cuentan desde 0 también:
  79. ColumnaDeCuadro = 0;
  80. FilaDeCuadro = 0;
  81. do {
  82. NombreDelCuadro = "Cuadro"+NroDelCuadroaColocar;
  83. attachMovie("sCuadro", NombreDelCuadro, NroDelCuadroaColocar);
  84. setProperty (NombreDelCuadro, _x, LargoDeCuadros*ColumnaDeCuadro+ColumnaDeCuadro*LargoDeCuadraditos);
  85. setProperty (NombreDelCuadro, _y, LargoDeCuadros*FilaDeCuadro+FilaDeCuadro*LargoDeCuadraditos);
  86. ColumnaDeCuadro++;
  87. if (ColumnaDeCuadro == CuadrosPorFila) {
  88. ColumnaDeCuadro = 0;
  89. FilaDeCuadro++;
  90. }
  91. // Se agregarán y distribuirán cuadraditos en el cuadro...
  92. // recién agregado, numerándolos del modo opuesto:
  93. NroDelCuadraditoaColocar = MaxCuadradito;
  94. // Sus columnas y filas se cuentan desde 0:
  95. ColumnaDeCuadradito = 0;
  96. FilaDeCuadradito = 0;
  97. // Se pintarán de modo que muestren el dibujo...
  98. // acorde a la división de dibujos; averiguarlo:
  99. ConvertiraBinarioInverso(DibujoaMostrar);
  100. ColumnaDeCuadradito = 0;
  101. FilaDeCuadradito = 0;
  102. do {
  103. eval(NombreDelCuadro).attachMovie("sCuadradito", "Cuadradito"+NroDelCuadraditoaColocar, NroDelCuadraditoaColocar);
  104. NombreDelCuadraditoSinNum = NombreDelCuadro+".Cuadradito";
  105. NombreDelCuadradito = NombreDelCuadraditoSinNum+NroDelCuadraditoaColocar;
  106. setProperty (NombreDelCuadradito, _x, ColumnaDeCuadradito*LargoDeCuadraditos);
  107. setProperty (NombreDelCuadradito, _y, FilaDeCuadradito*LargoDeCuadraditos);
  108. setProperty (NombreDelCuadradito, _width, LargoDeCuadraditos);
  109. setProperty (NombreDelCuadradito, _height, LargoDeCuadraditos);
  110. ColorDelCuadradito = new Color(NombreDelCuadradito);
  111. // Los números tomados del binario son los opuestos al cuadradito,
  112. // ya que los cuadraditos están numerados al revés.
  113. // Tomando el 1er caracter del binario y borrándolo para que...
  114. // en la próxima repetición se use el siguiente, se logra eso:
  115. NroDeColor = Number(DibujoEnBinario.charat(0));
  116. DibujoEnBinario = DibujoEnBinario.substring(1, DibujoEnBinario.length);
  117. if (NroDeColor == 0) {
  118. ColorDelCuadradito.setRGB(0);
  119. } else {
  120. ColorDelCuadradito.setRGB(0xFFFFFF);
  121. }
  122. // Esto es para modificar con más practicidad el color:
  123. set (NombreDelCuadro+".ColordeCuadradito"+NroDelCuadraditoaColocar, NroDeColor);
  124. ColumnaDeCuadradito++;
  125. if (ColumnaDeCuadradito == CuadraditosPorFila) {
  126. ColumnaDeCuadradito = 0;
  127. FilaDeCuadradito++;
  128. }
  129. NroDelCuadraditoaColocar--;
  130. } while (NroDelCuadraditoaColocar > -1);
  131. NroDelCuadroaColocar++;
  132. DibujoaMostrar = DibujoaMostrar-Disminucion;
  133. // trace("DibujoaMostrar: "+DibujoaMostrar);
  134. } while (NroDelCuadroaColocar < Cuadros);
  135. }
  136. // PorFila es también por columna:
  137. CuadrosPorFila = 2;
  138. // Debido a que en cierto chequeo se asume que...
  139. // si el cuadradito no está en la parte inferior ni...
  140. // superior entonces está en una fila intermedia,
  141. // conviene que CuadraditosPorFila comience siendo >2:
  142. CuadraditosPorFila = 3;

Probablemente obtengo el binario al revés y luego lo aplica al revés de eso, no sé, algunos cálculos me los dijo GPT ¿qué me conviene hacer?


« Última modificación: 30 Marzo 2025, 03:45 am por Tachikomaia » En línea

Tachikomaia


Desconectado Desconectado

Mensajes: 1.518


Hackentifiko!


Ver Perfil
Re: Mostrar dibujos variándolos desde izquierda arriba, empezando por una _|
« Respuesta #1 en: 31 Marzo 2025, 09:10 am »

Aparentemente sí era eso, lo hablé con Deepseek y lo solucioné:
Código
  1. function ConvertiraBinario (numero) {
  2. // Averiguar cómo es en binario:
  3. DibujoEnBinario = "";
  4. while (numero>0) {
  5. DibujoEnBinario = numero%2+DibujoEnBinario;
  6. numero = Math.floor(numero/2);
  7. }
  8. // Agregar 0s a DibujoEnBinario si hacen falta:
  9. while (DibujoEnBinario.length<Cuadraditos) {
  10. DibujoEnBinario = 0+DibujoEnBinario;
  11. }
  12. }

Dice que hay mejores formas de hacerlo, pero yo de esto no entiendo mucho ni me llama mucho, estas cosas matemáticas.


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Viviendo el momento, desde arriba
Foro Libre
Servia 8 4,303 Último mensaje 26 Noviembre 2010, 14:04 pm
por Servia
Ayuda como insertar datos desde abajo para arriba en un TextArea
Java
sr600 0 2,756 Último mensaje 30 Noviembre 2012, 19:23 pm
por sr600
Mostrar ceros a la izquierda en un entero en C++ « 1 2 »
Programación C/C++
erest0r 19 23,393 Último mensaje 6 Septiembre 2013, 15:23 pm
por Eternal Idol
Flecha arriba y izquierda más space no funciona
Desarrollo Web
patilanz 0 1,786 Último mensaje 19 Diciembre 2015, 20:45 pm
por patilanz
[Pregunta]: Jquery acumular desde arriba
Desarrollo Web
Leguim 0 1,588 Último mensaje 25 Febrero 2019, 07:16 am
por Leguim
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines