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

 

 


Tema destacado: Estamos en la red social de Mastodon


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Otro error por decimales creo.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Otro error por decimales creo.  (Leído 1,194 veces)
Tachikomaia


Desconectado Desconectado

Mensajes: 1.226


Superhacker (es broma xD )


Ver Perfil
Otro error por decimales creo.
« en: 14 Febrero 2024, 06:36 am »

Necesito que unos cuadrados (les llamo Pixeles) se coloquen uno al lado de otro como si fuese un tablero de ajedrez pero de 2x2, luego de 3x3, y así. El tamaño de cada píxel varía según cuantos deben caber en la pantalla. Una vez obtenido el largo, al pixel1 se lo coloca en 64, 0, al 2 en 64+largo, 0, y así hasta cierto punto, es decir, se van colocando cada vez más en la derecha, hasta antes de que se salgan de la pantalla, momento en que vuelve a comenzar desde 64 en X, pero aumenta en Y.

El problema es que ese límite, creo que al hacer sumas con decimales es superado antes de lo que debe. El programa está hecho de modo que coloca el píxel en el límite, y luego cuando lo supera hace lo que dije arriba. Cuando son 5x5 el límite es 371.2. Ocurre esto:
El pixel 1 se colocó en 64, 0
El pixel 2 se colocó en 140.8, 0
El pixel 3 se colocó en 217.6, 0
El pixel 4 se colocó en 294.4, 0
El pixel 5 se colocó en 64, 76.8 <- Mal colocado.

¿Qué puedo hacer para evitar el error? No es sólo para 5x5, debe servir para cualquier número entero digamos.

La parte que interesa está en el fotograma 2:

Código
  1.   actions for fotograma 1
  2.      PixelesdeLargo = 1;
  3.      function Variar () {
  4.         PixelaModificar = "ColordePixel"+Puntero;
  5.         ColordePixelaModificar = eval(PixelaModificar);
  6.         // ¿El pixel puede cambiar de color?
  7.         if (ColordePixelaModificar<1) {
  8.            // Sí, cambiarlo:
  9.            set (PixelaModificar, ColordePixelaModificar+1);
  10.            Col = new Color("Pixel"+Puntero);
  11.            Col.setRGB(parseInt(0, 16));
  12.            SumadePintados = SumadePintados+1;
  13.            // ¿El píxel está en el extremo derecho o abajo, donde no había en una hoja más chica?
  14.            if (Puntero/PixelesdeLargo == Math.floor(Puntero/PixelesdeLargo) or Puntero>MinPixelInferior) {
  15.               // Sí, actualizar SumadePintadosNuevos:
  16.               SumadePintadosNuevos = SumadePintadosNuevos+1;
  17.            }
  18.            // ¿El dibujo tiene píxeles donde no había en una hoja más chica...
  19.            // y son al menos (PixelesdeLargo) píxeles?
  20.            if (SumadePintadosNuevos>0 && SumadePintados>MinSumadePintados) {
  21.               DibujoListo = "Sí";
  22.               // Darme tiempo de ver el dibujo.
  23.               // Volver.
  24.               Puntero = MaxPosiciondePuntero;
  25.               gotoAndPlay (5);
  26.            } else {
  27.               // No, el dibujo es repetido, no mostrarlo y hacer otro:
  28.               DibujoListo = "No";
  29.               Puntero = MaxPosiciondePuntero;
  30.            }
  31.         } else {
  32.            // El pixel no puede cambiar de color, resetearlo:
  33.            set (PixelaModificar, 0);
  34.            Col = new Color("Pixel"+Puntero);
  35.            Col.setRGB(parseInt("FFFFFF", 16));
  36.            SumadePintados = SumadePintados-1;
  37.            // ¿El píxel está en el extremo derecho o abajo, donde no había en una hoja más chica?
  38.            if (Puntero/MaxPosiciondePuntero == Math.floor(Puntero/MaxPosiciondePuntero) or Puntero>MinPixelInferior) {
  39.               // Sí, actualizar SumadePintadosNuevos:
  40.               SumadePintadosNuevos = SumadePintadosNuevos-1;
  41.            }
  42.            // ¿Hay un pixel anterior?
  43.            if (Puntero>1) {
  44.               // Sí, apuntar a ese:
  45.               Puntero = Puntero-1;
  46.               // Continuar haciendo el dibujo:
  47.               DibujoListo = "No";
  48.            } else {
  49.               // No, aumentar tamaño de hoja y reiniciar.
  50.               DibujoListo = "Sí";
  51.               gotoAndPlay (2);
  52.            }
  53.         }
  54.      }
  55.   actions for fotograma 2
  56.      PixelesdeLargo = PixelesdeLargo+1;
  57.      Pixeles = 0;
  58.      DistanciaEntrePixeles = 384/PixelesdeLargo;
  59.      PosicionX = 64-DistanciaEntrePixeles;
  60.      MaxPosicionXdePixel = 64+DistanciaEntrePixeles*(PixelesDeLargo-1);
  61.      PosicionY = 0;
  62.      MaxPosiciondePuntero = PixelesdeLargo*PixelesdeLargo;
  63.      Puntero = MaxPosiciondePuntero;
  64.      // Píxeles pintados:
  65.      SumadePintados = 0;
  66.      MinSumadePintados = PixelesdeLargo-1;
  67.      MinPixelInferior = PixelesdeLargo*(PixelesdeLargo-1);
  68.      // Píxeles pintados que no estaban en hojas de menos píxeles:
  69.      SumadePintadosNuevos = 0;
  70.      // Agregar píxeles en blanco:
  71.      do {
  72.         Pixeles = Pixeles+1;
  73.         PosicionX = PosicionX+DistanciaEntrePixeles;
  74.         if (PosicionX>MaxPosicionXdePixel) {
  75.            PosicionX = 64;
  76.            PosicionY = PosicionY+DistanciaEntrePixeles;
  77.         }
  78.         trace ("El pixel "+Pixeles+" se colocó en "+PosicionX+", "+PosicionY);
  79.         attachMovie("mPixel", "Pixel"+Pixeles, Pixeles);
  80.         setProperty ("Pixel"+Pixeles, _x, PosicionX);
  81.         setProperty ("Pixel"+Pixeles, _y, PosicionY);
  82.         setProperty ("Pixel"+Pixeles, _width, DistanciaEntrePixeles);
  83.         setProperty ("Pixel"+Pixeles, _height, DistanciaEntrePixeles);
  84.      } while (Pixeles<MaxPosiciondePuntero);
  85.      stop ();
  86.   actions for fotograma 3
  87.      Variar();
  88.   actions for fotograma 4
  89.      Variar();
  90.      if (DibujoListo == "No") {
  91.         gotoAndPlay (3);
  92.      }
  93.   actions for fotograma 6
  94.      gotoAndPlay (3);


En línea

Tachikomaia


Desconectado Desconectado

Mensajes: 1.226


Superhacker (es broma xD )


Ver Perfil
Re: Otro error por decimales creo.
« Respuesta #1 en: 16 Febrero 2024, 10:48 am »

Hallé una solución a esto pero buscaba algo que resolviera el tema de los decimales, lo que hice fue evitar usarlos en el chequeo.

En vez de chequear si la posición que se asignará es menor o igual a cierta cantidad... chequeo cuántos píxeles se colocaron en una fila.

Si se deben colocar 5, cuando se colocaron 5 ya sé que debo colocarlos más abajo.

Código
  1. PixelesdeLargo = PixelesdeLargo+1;
  2. // Colocados:
  3. Pixeles = 0;
  4. DistanciaEntrePixeles = 384/PixelesdeLargo;
  5. PosicionX = 64-DistanciaEntrePixeles;
  6. EnlaFilaActual = 0;
  7. PosicionY = 0;
  8. MaxPosiciondePuntero = PixelesdeLargo*PixelesdeLargo;
  9. Puntero = MaxPosiciondePuntero;
  10. // Píxeles pintados:
  11. SumadePintados = 0;
  12. MinSumadePintados = PixelesdeLargo-1;
  13. MinPixelInferior = PixelesdeLargo*(PixelesdeLargo-1);
  14. // Píxeles pintados que no estaban en hojas de menos píxeles:
  15. SumadePintadosNuevos = 0;
  16. // Agregar píxeles en blanco:
  17. do {
  18. Pixeles = Pixeles+1;
  19. if (EnlaFilaActual < PixelesdeLargo) {
  20. EnlaFilaActual = EnlaFilaActual+1;
  21. PosicionX = PosicionX+DistanciaEntrePixeles;
  22. } else {
  23. PosicionX = 64;
  24. EnlaFilaActual = 1;
  25. PosicionY = PosicionY+DistanciaEntrePixeles;
  26. }
  27. trace("El pixel "+Pixeles+" se colocó en "+PosicionX+", "+PosicionY);
  28. attachMovie("mPixel", "Pixel"+Pixeles, Pixeles);
  29. setProperty ("Pixel"+Pixeles, _x, PosicionX);
  30. setProperty ("Pixel"+Pixeles, _y, PosicionY);
  31. setProperty ("Pixel"+Pixeles, _width, DistanciaEntrePixeles);
  32. setProperty ("Pixel"+Pixeles, _height, DistanciaEntrePixeles);
  33. } while (Pixeles<MaxPosiciondePuntero);


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
ayuda con este programa, tengo un error logico creo
Programación C/C++
TaLaP0 XoR BiT 2 2,485 Último mensaje 3 Diciembre 2012, 04:06 am
por TaLaP0 XoR BiT
Creo que la controversia GNU/Linux por el nombre tiene un error
GNU/Linux
mikemizi 5 2,439 Último mensaje 6 Enero 2014, 16:05 pm
por dato000
Error de librerias creo « 1 2 »
.NET (C#, VB.NET, ASP)
nolasco281 16 8,894 Último mensaje 19 Junio 2015, 07:49 am
por zonahurbana
como creo un bat desde otro bat
Scripting
tomasscfgcu 1 1,682 Último mensaje 14 Mayo 2015, 22:51 pm
por tomasscfgcu
Error creo que de comillas en la cadena de conexion, Ayuda
Programación C/C++
llogui 3 4,589 Último mensaje 21 Septiembre 2021, 20:33 pm
por EdePC
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines