Necesito este algoritmo

Soltrac

A ver si a alguien se le ocurre una manera mas o menos sencilla de hacerlo. Yo lo q kiero es doblar de tamaño una imagen. Si suponemos que la imagen es una matriz de pixeles (o numeros p ej), pues lo q kiero hacer es que cada pixel se propague a los espacios siguientes para hacerlo mas grande.

Os pongo un ejemplo para q se entienda mas claro:

Vamos a suponer q cada numero es un color: Tenemos una matriz asi:

1 2 3
4 5 6
7 8 9

Al Doblarla quiero q aparezca asi:

1 1 2 2 3 3
1 1 2 2 3 3
4 4 5 5 6 6
4 4 5 5 6 6
7 7 8 8 9 9
7 7 8 8 9 9

Y al doblarla de nuevo:

1 1 1 1 2 2 2 2 3 3 3 3
1 1 1 1 2 2 2 2 3 3 3 3
1 1 1 1 2 2 2 2 3 3 3 3
1 1 1 1 2 2 2 2 3 3 3 3
4 4 4 4 5 5 5 5 6 6 6 6
4 4 4 4 5 5 5 5 6 6 6 6
4 4 4 4 5 5 5 5 6 6 6 6
4 4 4 4 5 5 5 5 6 6 6 6
7 7 7 7 8 8 8 8 9 9 9 9
7 7 7 7 8 8 8 8 9 9 9 9
7 7 7 7 8 8 8 8 9 9 9 9
7 7 7 7 8 8 8 8 9 9 9 9

Y asi sucesivamente...es algo parecido a la lupa del windows.

Eso solo...si a alguien se le ocurre una manera de hacerlo, me da = el lenguaje o pseudocodigo, se lo agradeceria bastante :) O algun codigo fuente que haga eso...o cualkier tipo de informacion.

Gracias:)

S

Si se me ocurre como hacerlo pero no tengo moral ni tiempo para ponerme ahora, a ver si te puedo explicar un poco mi idea...

Lo que se me ocurre es que por cada incremento, hagas un recorrido desde abajo a la izkierda hasta arriba a la derecha, en el que termino a termino vayas poniendo el numero en la posicion que pasará a ocupar (contando con que los numeros de arriba ocuparian mas filas y demas (me sigues o es un lio??) yo creo que es ahí donde está la clave.

Por ejemplo, el 7 de la primera matriz está en la 3ª fila, con el primer incremento pasaria a estár en la 6ª el 4 está en la 2ª pasaria a estar en la 4ª fila, es un poco lio, peor una vez hagas el primero ya está todo lo demás, ya sabes, con paciencia y con saliba se la metio el elefante a la hormiga... ;)

Bueno que te sea leve.

maRc

Me has pillado de buen humor, y te hecho que lo dobla dos veces, en C. No tengo tiempo de ponerme a explicarte como funciona, pero supongo que podrás entenderlo.

#include <stdio.h>

int main() {
int A[3][3], B[6][6], C[12][12], i, j;


A[0][0]= 1;
A[0][1]= 2;
A[0][2]= 3;
A[1][0]= 4;
A[1][1]= 5;
A[1][2]= 6;
A[2][0]= 7;
A[2][1]= 8;
A[2][2]= 9;

for (i=0;i<3;i++)
for (j=0;j<3;j++) {
B[2i][2j]=A[j];
B[2i+1][2j]=A[j];
B[2i][2j+1]=A[j];
B[2i+1][2j+1]=A[j];
}


for (i=0;i<6;i++)
for (j=0;j<6;j++) {
C[2i][2j]=B[j];
C[2i+1][2j]=B[j];
C[2i][2j+1]=B[j];
C[2i+1][2j+1]=B[j];
}


for (i=0;i<3;i++) {
for (j=0;j<3;j++)
printf("%d", A[j]);
printf("\n");
}


printf("\n");

for (i=0;i<6;i++) {
for (j=0;j<6;j++)
printf("%d", B[j]);
printf("\n");
}

printf("\n");

for (i=0;i<12;i++) {
for (j=0;j<12;j++)
printf("%d", C[i][j]);
printf("\n");
}

return 0;
}

PD: No pidais más deberes, leñe :P

Soltrac

Deberes? jajajjaj

Tio, no es un problemitas de clases, yo he terminado la carrera ya. Es una cosa q necesitaba para mi proyecto de fin de carrera de tratamiento de imagenes con el bus AER, una minusculita cosa.

Gracias de todas formas :)

Whose

Estoy intentando hacerlo con PHP, si lo consigo ahora pego el codigo.

maRc

Es que últimamente se piden unas cosas por aquí que... Bueno, espero que te haya servido :)

Soltrac

Si me ha servido :)

Gracias...trankilo q pondre en comentarios q el algoritmo es tuyo XDDDD

Bueno ahora sigo a lo mio...a transformarlo a imagenes :)

IS4kO

Creo q es mucho mas facil de lo como lo quereis hacer.

Si es una matriz lo que te interesa no es doblar posicion por posicion, sino el numero de posiciones por fila y columna.

ejem:

Tu dices que tienes por ejmplo:

12
12

si lo doblo por 2 por ejemplo me quedaria:

1234
1234
1234
1234

En vb creo que era:

Dim MiMatriz (a, b) / / Declaro matriz de dimensiones a*b

ReDim MiMatriz (a To c, b To d) //Redimensiono la variable a pasara a tener valor c y la variable b valor d

En el ejemplo de una matriz 2*2 q quieres duplicar, en este caso te pongo valores estaticos, pero como te explica arriba puedes pasarle variables. Te quedaria:

Dim matriz(2,2)

ReDim matriz (2 to 4, 2 to 4)

Creo que si es lo que buscabas esta forma es mucho mas facil :) suerte

S

mulmat :: [[Int]] -> [[Int]]
mulmat [] = []
mulmat (e:l) = mulvect e : mulvect e : mulmat l

mulvect :: [Int] -> [Int]
mulvect [] = []
mulvect (e:l) = e : e : mulvect l

Haskell pwnz teh j00!

Soltrac

La version de haskell mola jajajaj

No se...la verdad es q no estoy haciendo el proyecto con VB, lo estoy haciendo usando C++ Builder q es lo q mejor me manejo y bueno...estoy casi segurisimo q no hay ninguna manera de hacerlo si no es "a mano".

Por ahora usare la version de C de marc, q me va de putisima madre para lo q kiero...q no he tenido ni q modificar nada xDD

De todas formas...is4k0, creo q no se si entendiste bien lo q dije...yo si kiero doblar posiciones. Yo lo q kiero hacer es el efecto lupa del paint aplicado a imágenes. Si piensas q una imagen es una matriz de píxeles, a mi me interesa duplicar casa posición. Y con la version de marc perfectamente se puede.

No se si te he entendido bien, pero creo q tu me dices solo redimensionar...sin duplicar lo q guarda cada posicion.

MkPoLLo

como no quieras q te lo haga en pascal.... xD (puta uni, nos ponen program haciendo ingenieria industrial, y ademas nos dan turbo pascal, podrian poner c o asi q es algo mas acutal no????)

LOc0

#9

¿No lo tienes en ASM? Jaujauajuea...

Salu2 ;)

S

#11 C sólo es un año más "joven" que Pascal.
#12 ¿De qué procesador?

D

Soltrack de que carrera es ese proyecto?

Me puedes decir de que va tu proyecto, es que el año que viene lo más seguro o al siguiente me toque hacer a mí el mio. Yo estudio ing. tec en informática de gestión

LOc0

#13

Pues para el nuestro, por ejemplo ;)

Salu2 ;)

PD: Por cierto Soy_Heaton, como se te ve puesto en Linux, ¿serías tan amable de compilar y ejecutar http://www.elcopias.com/Fecha.java y decirme si te sale la fecha del sistema correctamente (dd/mm/aaaa)?? (Es que yo estoy con win2, no tengo amigos (con Linux xD) y no me da tiempo a bajarme na :(...)

PD2: Si me puedes poner el String ORIGINAL del objeto Date, pues muxo mejor ;)

aLeX

Pregunto:

¿Por qué creais matrices para cada tamaño?

No sería mas simple y sencillo una función/método mostrar(matriz, zoom) que reciba la matriz y el factor de zoom y repita cada coordenada zoom veces, y cada fila zoom veces...

¿Necesitas una matriz redimensionada para trabajar con ella?

Create una clase matriz con un constructor que reciba la matriz, su tamaño y el zoom que quieres hacer, y te construya otra matriz con ese tamaño y bla bla bla...

Lo que nunca haría sería crearme tres matrices A,B,C... o 300 matrices de buenas a primeras, usando un porron de megas.

PiradoIV

#15

$ java5 main
25/1/2005

Saludotes,
Pirado IV estuvo akí ;)

PD:

$ uname -sr
Linux 2.6.9-gentoo-r9

Soltrac

#14 es de lo tuyo...de I.T informatica de gestión. El proyecto se llama análisis de los sistemas bioinspirados y está realizado con un profesor del departamento de Ingeniería de Sistemas y Automática, Tecnología Eléctrica y Electrónica (vamos...hardware) y básicamente trata de simular mediante un programa un bus que recibe unas imágenes (en mi caso, el proyecto no serán imágenes sino vídeos AVI) y ver la salida que tienen una vez procesado por el bus. Parece complicado, pero una vez estudias el bus AER se entiende fácilmente. Yo te recomiendo q hagas lo q hace todo el mundo, un programa que gestione una tienda o una empresa, con su base de datos y eso. Si yo me compliqué es pq soy gilipollas (eso y q el profesor de metodología no me cae muy bien)

Y sobre lo de crear una matriz. Yo no creo 3 matrices evidentemente. Yo tengo una imagen que básicamente es una matriz de píxels y lo q hago es crear un gráfico que sea el doble de tamaño (la matriz tb será el doble), le aplico el algoritmo y le asigno ese gráfico a la imagen y así sucesivamente. Como el gráfico lo creo en memoria dinámica y luego lo borro, nunca tengo problemas de malgastar y no es necesario crear una clase para eso.

S

#15 No sé ensamblador de x86, y a no ser que lo necesite alguna vez para algo, creo que jamás lo aprenderé xD


Respecto a lo otro, no tengo Java instalado, pero visto el código, te aconsejo que en vez de tanto else if, crees un vector con el nombre de los meses ordenado, de forma que simplemente uses el índice y te devuelva el valor correspondiente. Más legible, más elegante, más mantenible y probablemente más eficiente.

Vale, lei mal el código. Pues en este caso nada, si quieres usa un hash, aunque en algunos lenguajes podrías tener los meses como enumerados (con asociación directa a un número) y en lugar de repetir comparaciones, tener un bucle.

Por cierto, usar OO para mostrar una fecha es matar moscas a cañonazos :P

Shock

#18 Mi proyecto de fin de carrera junto con otras cinco personas fue una web de gestion de una clinica veterinaria, donde podias dar altas a animales, bajas, ver las enfermedades que habian tenido, nos curramos una base de datos impresionante, casi programamos mas en SQL que en C# o HTML xD.

Ya para colmo hicimos un streaming de video para que via la web se pudiera ver mediante la intranet de la universidad las operaciones en directo que habia en los quirofanos...

Bueno en fin, solo te queria decir que aqui tienes a otro que se complico la vida tambien jaja XD.

D

#20 tío me estais kedando flipao, se puede hacer el proyecto junto con más personas? yo creo que aqui no... es individual..

LOc0

#17

Mil gracias ;)

#19

Más que moscas, pulgas y más que cañonazos misilazos, porque la práctica se podría hacer en 2-3 clases, pero hay que hacerla en algunas más " para aprovechar las ventajas de la POO" (y porque si no, te cascan xD).

Salu2 ;)

Usuarios habituales