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

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Ver si una imagen es horizontalmente simétrica o no.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ver si una imagen es horizontalmente simétrica o no.  (Leído 2,806 veces)
Tachikomaia


Desconectado Desconectado

Mensajes: 1.414


Hackentifiko!


Ver Perfil
Ver si una imagen es horizontalmente simétrica o no.
« en: 18 Abril 2024, 08:47 am »

Digamos que los pixeles tienen estos nombres:
123
456
789
Cada uno tiene un color guardado en una variable.

Debo hacer algo así:
Código:
// Si esta variable no cambia, el dibujo es simétrico:
Simetrico = "Sí"
X = Concatenar 123
Y = Concatenar 321
Si X != Y
  Simetrico = "No"
sino
  X = Concatenar 456
  Y = Concatenar 654
  Si X != Y
    Simetrico = "No"
  sino
    X = Concatenar 789
    Y = Concatenar 987
    Si X != Y
      Simetrico = "No"

Pero si el dibujo es muy grande no puedo hacer eso, tantos "si" metidos unos en otros y tantos concatenar. El tamaño del dibujo es variable.

Estoy intentando un par de loops así:
Código
  1. // Se captarán los colores de cada fila y al revés:
  2. // Si son distintos, ya no, el dibujo no es simétrico.
  3. Fila = 0;
  4. // Empezar a captar de una nueva fila:
  5. do {
  6. ColoresDeFila = "";
  7. InversionDeFila = "";
  8. Fila++;
  9. Columna = 0;
  10. ColumnaInversa = PixelesdeLargo+1;
  11. // Captar siguiente columna:
  12. do {
  13. Columna++;
  14. PixelaCaptar = ...
  15. ColoresDeFila = ColoresDeFila+eval("ColordePixel"+PixelaCaptar);
  16. ColumnaInversa--;
  17. InversoaCaptar = ...
  18. InversionDeFila = InversionDeFila+eval("ColordePixel"+InversoaCaptar);
  19. while Columna<PixelesdeLargo
  20. Si ColoresDeFila != InversionDeFila
  21. Simetrico = "No"
  22. Fila = PixelesdeLargo
  23. while Fila<PixelesdeLargo
Pero me falta lo que va en los puntos suspensivos, son fórmulas matemáticas cuyos resultados indican el pixel que debe mirarse y el opuesto. Tomando como base el tamaño que puse al inicio, PixelesdeLargo es 3. Bueno...
Cuando fila es 1 y columna 1, el pixel señalado debe ser el 1.
1 y 2: 2.
1 y 3: 3.
2 y 1: 4.
¿Cual es la fórmula? Puede iniciarse a contar desde fila 0 y columna 0 si les queda más cómodo.

Son 2 fórmulas las que preciso, pero teniendo una creo que puedo averiguar la otra.


« Última modificación: 18 Abril 2024, 08:55 am por Tachikomaia » En línea

Tachikomaia


Desconectado Desconectado

Mensajes: 1.414


Hackentifiko!


Ver Perfil
Re: Ver si una imagen es horizontalmente simétrica o no.
« Respuesta #1 en: 21 Abril 2024, 11:31 am »

Creo que ya las hallé:
PixelaCaptar = (Fila-1)*PixelesdeLargo+Columna;
InversoaCaptar = (Fila-1)*PixelesdeLargo+ColumnaInversa;


En línea

Serapis
Colaborador
***
Desconectado Desconectado

Mensajes: 3.391


Ver Perfil
Re: Ver si una imagen es horizontalmente simétrica o no.
« Respuesta #2 en: 22 Abril 2024, 00:24 am »

¿Qué utilidad práctica tiene saber si una imagen es simétrica horizontal o verticalmente???.
Así a bote pronto, no se me ocurre ninguna, tal vez la haya, pero jamás he visto a nadie intentar crear una función así en ninguna parte.
En línea

Tachikomaia


Desconectado Desconectado

Mensajes: 1.414


Hackentifiko!


Ver Perfil
Re: Ver si una imagen es horizontalmente simétrica o no.
« Respuesta #3 en: 22 Abril 2024, 14:07 pm »

El programa es basicamente para ver cuales son los posibles dibujos que pueden generarse, por curiosidad y para aprender para otros objetivos más adelante.

Genera los dibujos posibles (de 2 colores) en cierto orden pero algunos quiero que no se muestren, por ejemplo los horizontalmente simétricos, porque a mis ojos o para el objetivo que los quiero son iguales y no me sirve ver esos, repetidos, hace que el proceso sea más largo y aburrido.

No tiene mucho que ver pero me di cuenta de que son MUCHOS dibujos los que pueden generarse, incluso sólo con 2 colores, y casi nada interesante se genera así que estoy empezando otra manera que, la idea es que implique programación genética, pero por ahora no avancé mucho. No obstante quiero seguir con este proyecto también.

¿Ver si un número es capicúa para qué sirve? Eso sí se pide mucho ¿no?
En línea

Serapis
Colaborador
***
Desconectado Desconectado

Mensajes: 3.391


Ver Perfil
Re: Ver si una imagen es horizontalmente simétrica o no.
« Respuesta #4 en: 22 Abril 2024, 14:37 pm »

Si es como ejercicio... aunque entiende que como problema, en sí mismo no es un problema, quiero decir, no tiene complejidad alguna.

Si quieres hacer ejercicio, un problema (también estéril pero) que al menos si requiere pensar y ejercitar la mente y la programación operando con una imagen, es recorrer los píxeles de la imagen en espiral (cuadrada), empezando por el centro de la imagen, hacia afuera.

Un número capicúa no se suele pedir (nunca lo he visto), lo que si se suele pedir es demostrar si una cadena dada (un string) es palíndromo... en sí mismo no es útil, pero como ejercico es excelente para ejercitar el uso de pilas y colas (que es el ámbito en que se suele solicitar), o también en teoría de compiladores (automátas y lenguajes de contexto finito).

A eso me refiero... a que si te planteas algo como ejercicio, que sea por ejercitar algo específico de la programación, algo que aprendas nuevo, que profundices o que mejore tu dominio del tema... porque calcular sumas, restas multiplicación... asumo que es algo que ya tienes dominado desde hace muchos años, no?.

2 colores arrojan 2^n combinaciones, siendo 'n' la cantidad de píxeles que estimes. Es decir es binario, aún no dominas el binario?. Si es que no, verlo en colores no te ayudará mucho más, en ese caso es mejor operar en el corpus matemático... Tomar un número decimal, pasarlo a binario y 'encender o apagar bits específicos (sueltos o en grupos) en tal o cual posición y con cada cambio mostrar siempre el resultado en decimal y en binario.

No quiero ser impertinente, pero es que considero que pierdes mucho tiempo en problemas irrelevantes y entiendo que si lo emplearas en 'problemas útiles', adquirirías más conocimientos verdaderamente útiles.

p.d.: Mira, hay una operación que se llama 'transpose', y que consiste en tomar las filas y disponerlas como columnas, o al revés...
Técnicamente eso es rotar la imagen 90º... también requiere calcular (sumas, restas, multiplicaciones), pero es algo útil y tangible en la vida real.
De hecho hace muchos años edité el artículo de wikipedia 'Escítala', que es un sistema arcaico de cifrado, y que usa dicha técnica de transpose, aunque en ese caso puede alterarse a discreción el número de filas y columnas, pues se opera con letras en cada 'pixel' (casilla), apuntada por las cordenadas X,Y.
https://es.wikipedia.org/wiki/Esc%C3%ADtala
« Última modificación: 22 Abril 2024, 14:45 pm por Serapis » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Transpuesta y simetrica
Programación C/C++
Rich_crazy2 1 3,999 Último mensaje 10 Noviembre 2011, 01:34 am
por Rich_crazy2
Hola de nuevo :) como puedo mostrar horizontalmente números en un Lixtbox ?
.NET (C#, VB.NET, ASP)
luis456 6 3,873 Último mensaje 2 Enero 2014, 13:37 pm
por luis456
c++ matriz simetrica
Programación C/C++
77mapmap77 2 5,903 Último mensaje 28 Febrero 2016, 01:54 am
por 77mapmap77
alinear 2 divs horizontalmente float
Desarrollo Web
WIитX 2 2,043 Último mensaje 14 Mayo 2016, 00:30 am
por WIитX
fuente de 30v 3a simetrica
Electrónica
evil222 5 6,927 Último mensaje 18 Julio 2017, 16:25 pm
por simorg
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines