All pastes #1798695 Raw Edit

Miscellany

public text v1 · immutable
#1798695 ·published 2010-02-16 17:55 UTC
rendered paste body
%%Ing. David Said Martinez
%%Arquitectura Computacional III, Enero-Mayo de 2005
%%Programa generador de ruleta.


%%PARAMETROS DEL PROGRAMA (Pueden jugar con ellos)

%Dimension en x de la imagen
ilim = 128;%640/2; %|Pixels|

%Dimension en y de la imagen, REQUISITO, tiene que ser menor o igual que x.
jlim = 128;%480/2; %|Pixels|

%Numero de divisiones del circulo, los colores van de 1 a divs, estan
%codificados en hexadecimal y 8 bits. El maximo de divisiones es 255, duh.
divs = 35;

%%TERMINAN PARAMETROS DEL PROGRAMA

if(jlim>ilim)
    %Valida que las condiciones se cumplan.
    error('El programa considera que y es <= que x');
else
	%Calcula un vector de coordenadas para x
	x = linspace(-ilim/jlim, ilim/jlim, ilim);
    %Y un vector de coordenadas para y
	y = linspace(-1, 1, jlim);
	%Genera la matriz de coordenadas cartesianas.
	[X, Y] = meshgrid(x, y);
    
	%Calcula la matriz de R en polares
	R = sqrt(X.^2 + Y.^2);
    %Calcula la matriz de theta en polares
	theta = atan2(Y, X);
	%Todo lo que no quepa en un circulo 
	theta = theta.*(R<1);
	
    %Normalizacion de theta para dividir...
	theta = theta + abs(min(min(theta)));
	theta = theta./( max(max(theta) ) );
    
    %Hace las divisiones en theta segun lo especificado. Considerar que no
    % debe haber ningun gajo negro, para tener el negro como fondo...
	theta = (double((uint8(theta*(divs) + 1))).*(R<1));
    
    %Preparar otra matriz para graficar.
	theta2 = im2uint8(theta/(max(max(theta))));
	
    %Grafica de la imagen
	figure(1);
	imshow(theta2);
    title(sprintf('Ruleta de %d x %d pixeles con %d divisiones', ilim, jlim, divs ) );
    colormap default;
        
    %Cosas que no sirven :P
    figure(2);
    imshow(sin(R)/max(max(R)));
    title('Mapa de radios');
    colormap default;
	
    %Mas cosas que no sirven
    loco = (R/max(max(R))).*im2double(theta2);
    loco = abs( loco - max(max(loco))/2 );
    
    %Ma todavia...
    figure(3);
    imshow( loco/max(max(loco)) );
    title('Algo locochon...');
    colormap default;
	
    %%%%Comienza rutina para escribir el archivo
    
    %Abrir el archivo...
	file = fopen('ruleta.txt', 'w', 'native');
	
    %Imprime el encabezado del rom
	fprintf(file, '\tconstant ruleta : rom_type := \n\t(\n');
    
    %Recorrer la matriz
	for(jj=1:jlim)
        %Cada renglon comienza con dos tabs
        fprintf(file, '\t\t');    
        for(ii=1:ilim)
            %Escribir en hexadecimal...
            if( theta(jj, ii) >= 16 )
                %Si es de dos digitos escribir directamente
                fprintf(file, 'x"%2X"', theta(jj, ii) );
            else
                %Si es de un digito concatenar un 0 a la izquierda
                fprintf(file, 'x"0%1X"', theta(jj, ii) );
            end
            
            %La coma va en todos excepto el ultimo elemento
            if( ~(ii==ilim && jj==jlim) )
                fprintf(file, ', ');
            end
        end
        %Cada renglon termina con un fin de linea
        fprintf(file, '\n');
	end;
	%El Rom termina con un parentesis y un punto y coma
	fprintf(file, '\t);\n\n');
	%Cerrar el archivo.
	fclose(file);
end

%%Fin