Newsgrupos.com  

Retroceder   Newsgrupos.com > Forum > Newsgroup es.comp.lenguajes.* Foro > Newsgroup es.comp.lenguajes.tex
Registrarse Preguntas Frecuentes Lista de Foreros Calendario Buscar Temas de Hoy Marcar Foros Como Leídos




Respuesta
 
LinkBack Herramientas Desplegado
  #1 (permalink)  
Antiguo 22-10-2003, 22:29:44
Jesús Moreno
 
Mensajes: n/a
Predeterminado Dígitos segmentados

Hola:

Otra vez por aquí.
Estoy haciendo un documento, en los que comento el
funcionamiento de los dígitos de una calculadora. Sé que hay
símbolos que me permiten escribir todos los dígitos usando
"textifsym" y el paquete "ifsym", pero quiero ir un poco más
allá.
Necesito símbolos de varios segmentos que no tengan porqué
formar dígitos. Por ejemplo, un carácter formado por el
dígito superior, el medio y el derecho superior, etc.
Si esto no lo hay, ¿cómo los puedo crear?

Muchas gracias, y perdón si no me he explicado lo
suficiente.

Jesús Moreno

--
---


Responder Con Cita
Alt Today
Advertising
Google Adsense
 
This advertising will not be shown
in this way to registered members.
Register your free account today
and become a member on
Newsgrupos.com
Standard Sponsored Links

  #2 (permalink)  
Antiguo 23-10-2003, 11:38:07
Jose Luis Diaz
 
Mensajes: n/a
Predeterminado Re: Dígitos segmentados

"Jesús Moreno" <jmonteverdeARROBA***ono.com> writes:

> Hola:
>
> Otra vez por aquí.
> Estoy haciendo un documento, en los que comento el
> funcionamiento de los dígitos de una calculadora. Sé que hay
> símbolos que me permiten escribir todos los dígitos usando
> "textifsym" y el paquete "ifsym", pero quiero ir un poco más
> allá.
> Necesito símbolos de varios segmentos que no tengan porqué
> formar dígitos. Por ejemplo, un carácter formado por el
> dígito superior, el medio y el derecho superior, etc.
> Si esto no lo hay, ¿cómo los puedo crear?


He programado unas macros en metapost que permiten generar cualquier
combinación de los siete segmentos. Lo que hace es asignar a cada
segmento un numero:

0
+----+
1| |2
| 3 |
+----+
4| |5
| 6 |
+----+

y recibe como parámetro una cantidad decimal entre 0 y 127. Cada bit
de esa cantidad indica si el correspondiente segmento debe estar
encendido o apagado. Así, para sacar el "3", hay que encender los
segmentos 0,2,3,5 y 6, lo que significa pasarle el parámetro
2^0+2^2+2^3+2^5+2^6 que es 109. Etc. La macro permite elegir el color
del display LCD, de los segmentos encendidos y de los segmentos
apagados. Por defecto pone el display blanco (papel), los encendidos a
negro y los apagados a gris muy clarito. Pero puedes usar cualquier
otro color si te mola más :-)

Usando esta macro he creado 127 figuras, una para cada combinación
posible (un simple bucle for), llamadas 7seg.0, 7seg.1, 7seg.2,
.... 7seg.127 (por ejemplo, la última tiene todos los segmentos
encendidos y por tanto es el "8"). Estas figuras son EPS y puedes
incluirlas en tu documento latex.

Este sería un ejemplo, para mostrar la cantidad 231, con dos "espacios
blancos" por la izquierda:

\documentclass{article}
\usepackage{graphicx}
\usepackage[latin1]{inputenc}

\DeclareGraphicsRule{*}{mps}{*}{} % Para que admita la extension .1, .2, etc

% Defino una macro para que sea más cómodo incluir las figuras,
% y que las escala además al tamaño de letra actual
\def\sseg#1{\includegraphics[width=1ex]{7seg.#1}}

\begin{document}
El resultado salió 231, es decir, el display mostró:
\fbox{\sseg{0}\sseg{0}\sseg{93}\sseg{109}\sseg{36} }.
\end{document}

Y a continuación el programa metapost que genera los 128
caracteres. Debes guardarlo con el nombre 7seg.mp y compilarlo con
mpost (forma parte de las distribuciones latex más corrientes). Si no
te aclaras con la compilación metapost, puedo enviarte por email los
128 ficheros que genera como resultado.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%
% 7seg.mp
% Genera las 128 combinaciones posibles de un display de
% siete segmentos
% (c) 2003 Jose Luis Diaz
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%
prologues:=2;

w:=1cm; % Ancho y alto de cada segmento
h:=3mm;

color encendido, apagado, fondo;

% Combinaciones de colores. Descomenta solo una de ellas

% Combinacion blanco, negro y gris
fondo:=white;
encendido:=black;
apagado:=.95white;

% Combinacion blanco y negro
% fondo:=white;
% encendido:=black;
% apagado:=white;

% Combinacion LCD
% fondo:=(.5,.99,.7);
% encendido:=(.1, .3, .2);
% apagado:=(.5,.9,.6);

% Combinación fosforo verde
% fondo:=black;
% encendido:=(.7,.99, .7);
% apagado:=(.1,.3,.1);

vardef segmento = % Macro que proporciona la forma de un segmento
save p;
pair p[];
p[0]=(-w/2,0);
p[1]=p[0] shifted (h/2, -h/2);
p[2]=p[3] shifted (-h/2, -h/2);
p[3]=(w/2, 0);
p[4]=-p[1];
p[5]=-p[2];
(for i:=0 upto 5: p[i]-- endfor cycle)
enddef;

% Macro que pinta los 7 segmentos, cada uno encendido o apagado
% segun los bits del entero que recibe como parámetro
vardef display(expr n) =
save p, r, m;
pair p[]; % Posición del centro de cada segmento
numeric r[]; % Rotación de cada segmento
numeric m;
m:=n;
% Inicialización de p y r. Los segmentos se numeran así:
%
% 0
% +----+
% 1| |2
% | 3 |
% +----+ <-- origen de coordenadas en el centro del
% 4| |5 segmento 3
% | 6 |
% +----+
%
p[3]=origin;
p[0]=p[3] shifted (0,w);
p[6]=-p[0];
p[1]=p[3] shifted (-w/2, w/2);
p[5]=-p[1];
p[4]=p[3] shifted (-w/2, -w/2);
p[2]=-p[4];
r[0]=r[3]=r[6]=0;
r[1]=r[2]=r[4]=r[5]=90;

% Pintar el rectángulo de fondo
filldraw (origin--(w+1.2h,0)--(w+1.2h,2w+1.2h)--(0,2w+1.2h)--cycle)
shifted (-w/2-1.2h/2, -w-1.2h/2) withcolor fondo;
% Y ahora los 7 segmentos
for i:=0 upto 6: % Recorrer los 7 segmentos
if (m mod 2=1): % Si activado, pintarlo en color encendido
filldraw segmento rotated r[i] shifted p[i] withcolor encendido;
draw segmento rotated r[i] shifted p[i]
withpen pencircle scaled .05w withcolor fondo;
else: % si no está activado, lo pintamos en color apagado
filldraw segmento rotated r[i] shifted p[i] withcolor apagado;
draw segmento rotated r[i] shifted p[i]
withpen pencircle scaled .05w withcolor fondo;
fi;
m:=(m - m mod 2)/2; % Desplazar para acceder al siguiente bit
endfor;
enddef;

% Y ahora generar las 128 figuras en un bucle for
for i:=0 upto 127:
beginfig(i);
display(i);
endfig;
endfor;
end;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%
% Fin de 7seg.mp
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%

¡Que aproveche!
--
JL Diaz
Responder Con Cita
  #3 (permalink)  
Antiguo 23-10-2003, 11:38:07
Jose Luis Diaz
 
Mensajes: n/a
Predeterminado Re: Dígitos segmentados

"Jesús Moreno" <jmonteverdeARROBA***ono.com> writes:

> Hola:
>
> Otra vez por aquí.
> Estoy haciendo un documento, en los que comento el
> funcionamiento de los dígitos de una calculadora. Sé que hay
> símbolos que me permiten escribir todos los dígitos usando
> "textifsym" y el paquete "ifsym", pero quiero ir un poco más
> allá.
> Necesito símbolos de varios segmentos que no tengan porqué
> formar dígitos. Por ejemplo, un carácter formado por el
> dígito superior, el medio y el derecho superior, etc.
> Si esto no lo hay, ¿cómo los puedo crear?


He programado unas macros en metapost que permiten generar cualquier
combinación de los siete segmentos. Lo que hace es asignar a cada
segmento un numero:

0
+----+
1| |2
| 3 |
+----+
4| |5
| 6 |
+----+

y recibe como parámetro una cantidad decimal entre 0 y 127. Cada bit
de esa cantidad indica si el correspondiente segmento debe estar
encendido o apagado. Así, para sacar el "3", hay que encender los
segmentos 0,2,3,5 y 6, lo que significa pasarle el parámetro
2^0+2^2+2^3+2^5+2^6 que es 109. Etc. La macro permite elegir el color
del display LCD, de los segmentos encendidos y de los segmentos
apagados. Por defecto pone el display blanco (papel), los encendidos a
negro y los apagados a gris muy clarito. Pero puedes usar cualquier
otro color si te mola más :-)

Usando esta macro he creado 127 figuras, una para cada combinación
posible (un simple bucle for), llamadas 7seg.0, 7seg.1, 7seg.2,
.... 7seg.127 (por ejemplo, la última tiene todos los segmentos
encendidos y por tanto es el "8"). Estas figuras son EPS y puedes
incluirlas en tu documento latex.

Este sería un ejemplo, para mostrar la cantidad 231, con dos "espacios
blancos" por la izquierda:

\documentclass{article}
\usepackage{graphicx}
\usepackage[latin1]{inputenc}

\DeclareGraphicsRule{*}{mps}{*}{} % Para que admita la extension .1, .2, etc

% Defino una macro para que sea más cómodo incluir las figuras,
% y que las escala además al tamaño de letra actual
\def\sseg#1{\includegraphics[width=1ex]{7seg.#1}}

\begin{document}
El resultado salió 231, es decir, el display mostró:
\fbox{\sseg{0}\sseg{0}\sseg{93}\sseg{109}\sseg{36} }.
\end{document}

Y a continuación el programa metapost que genera los 128
caracteres. Debes guardarlo con el nombre 7seg.mp y compilarlo con
mpost (forma parte de las distribuciones latex más corrientes). Si no
te aclaras con la compilación metapost, puedo enviarte por email los
128 ficheros que genera como resultado.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%
% 7seg.mp
% Genera las 128 combinaciones posibles de un display de
% siete segmentos
% (c) 2003 Jose Luis Diaz
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%
prologues:=2;

w:=1cm; % Ancho y alto de cada segmento
h:=3mm;

color encendido, apagado, fondo;

% Combinaciones de colores. Descomenta solo una de ellas

% Combinacion blanco, negro y gris
fondo:=white;
encendido:=black;
apagado:=.95white;

% Combinacion blanco y negro
% fondo:=white;
% encendido:=black;
% apagado:=white;

% Combinacion LCD
% fondo:=(.5,.99,.7);
% encendido:=(.1, .3, .2);
% apagado:=(.5,.9,.6);

% Combinación fosforo verde
% fondo:=black;
% encendido:=(.7,.99, .7);
% apagado:=(.1,.3,.1);

vardef segmento = % Macro que proporciona la forma de un segmento
save p;
pair p[];
p[0]=(-w/2,0);
p[1]=p[0] shifted (h/2, -h/2);
p[2]=p[3] shifted (-h/2, -h/2);
p[3]=(w/2, 0);
p[4]=-p[1];
p[5]=-p[2];
(for i:=0 upto 5: p[i]-- endfor cycle)
enddef;

% Macro que pinta los 7 segmentos, cada uno encendido o apagado
% segun los bits del entero que recibe como parámetro
vardef display(expr n) =
save p, r, m;
pair p[]; % Posición del centro de cada segmento
numeric r[]; % Rotación de cada segmento
numeric m;
m:=n;
% Inicialización de p y r. Los segmentos se numeran así:
%
% 0
% +----+
% 1| |2
% | 3 |
% +----+ <-- origen de coordenadas en el centro del
% 4| |5 segmento 3
% | 6 |
% +----+
%
p[3]=origin;
p[0]=p[3] shifted (0,w);
p[6]=-p[0];
p[1]=p[3] shifted (-w/2, w/2);
p[5]=-p[1];
p[4]=p[3] shifted (-w/2, -w/2);
p[2]=-p[4];
r[0]=r[3]=r[6]=0;
r[1]=r[2]=r[4]=r[5]=90;

% Pintar el rectángulo de fondo
filldraw (origin--(w+1.2h,0)--(w+1.2h,2w+1.2h)--(0,2w+1.2h)--cycle)
shifted (-w/2-1.2h/2, -w-1.2h/2) withcolor fondo;
% Y ahora los 7 segmentos
for i:=0 upto 6: % Recorrer los 7 segmentos
if (m mod 2=1): % Si activado, pintarlo en color encendido
filldraw segmento rotated r[i] shifted p[i] withcolor encendido;
draw segmento rotated r[i] shifted p[i]
withpen pencircle scaled .05w withcolor fondo;
else: % si no está activado, lo pintamos en color apagado
filldraw segmento rotated r[i] shifted p[i] withcolor apagado;
draw segmento rotated r[i] shifted p[i]
withpen pencircle scaled .05w withcolor fondo;
fi;
m:=(m - m mod 2)/2; % Desplazar para acceder al siguiente bit
endfor;
enddef;

% Y ahora generar las 128 figuras en un bucle for
for i:=0 upto 127:
beginfig(i);
display(i);
endfig;
endfor;
end;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%
% Fin de 7seg.mp
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%

¡Que aproveche!
--
JL Diaz
Responder Con Cita
  #4 (permalink)  
Antiguo 23-10-2003, 11:38:07
Jose Luis Diaz
 
Mensajes: n/a
Predeterminado Re: Dígitos segmentados

"Jesús Moreno" <jmonteverdeARROBA***ono.com> writes:

> Hola:
>
> Otra vez por aquí.
> Estoy haciendo un documento, en los que comento el
> funcionamiento de los dígitos de una calculadora. Sé que hay
> símbolos que me permiten escribir todos los dígitos usando
> "textifsym" y el paquete "ifsym", pero quiero ir un poco más
> allá.
> Necesito símbolos de varios segmentos que no tengan porqué
> formar dígitos. Por ejemplo, un carácter formado por el
> dígito superior, el medio y el derecho superior, etc.
> Si esto no lo hay, ¿cómo los puedo crear?


He programado unas macros en metapost que permiten generar cualquier
combinación de los siete segmentos. Lo que hace es asignar a cada
segmento un numero:

0
+----+
1| |2
| 3 |
+----+
4| |5
| 6 |
+----+

y recibe como parámetro una cantidad decimal entre 0 y 127. Cada bit
de esa cantidad indica si el correspondiente segmento debe estar
encendido o apagado. Así, para sacar el "3", hay que encender los
segmentos 0,2,3,5 y 6, lo que significa pasarle el parámetro
2^0+2^2+2^3+2^5+2^6 que es 109. Etc. La macro permite elegir el color
del display LCD, de los segmentos encendidos y de los segmentos
apagados. Por defecto pone el display blanco (papel), los encendidos a
negro y los apagados a gris muy clarito. Pero puedes usar cualquier
otro color si te mola más :-)

Usando esta macro he creado 127 figuras, una para cada combinación
posible (un simple bucle for), llamadas 7seg.0, 7seg.1, 7seg.2,
.... 7seg.127 (por ejemplo, la última tiene todos los segmentos
encendidos y por tanto es el "8"). Estas figuras son EPS y puedes
incluirlas en tu documento latex.

Este sería un ejemplo, para mostrar la cantidad 231, con dos "espacios
blancos" por la izquierda:

\documentclass{article}
\usepackage{graphicx}
\usepackage[latin1]{inputenc}

\DeclareGraphicsRule{*}{mps}{*}{} % Para que admita la extension .1, .2, etc

% Defino una macro para que sea más cómodo incluir las figuras,
% y que las escala además al tamaño de letra actual
\def\sseg#1{\includegraphics[width=1ex]{7seg.#1}}

\begin{document}
El resultado salió 231, es decir, el display mostró:
\fbox{\sseg{0}\sseg{0}\sseg{93}\sseg{109}\sseg{36} }.
\end{document}

Y a continuación el programa metapost que genera los 128
caracteres. Debes guardarlo con el nombre 7seg.mp y compilarlo con
mpost (forma parte de las distribuciones latex más corrientes). Si no
te aclaras con la compilación metapost, puedo enviarte por email los
128 ficheros que genera como resultado.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%
% 7seg.mp
% Genera las 128 combinaciones posibles de un display de
% siete segmentos
% (c) 2003 Jose Luis Diaz
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%
prologues:=2;

w:=1cm; % Ancho y alto de cada segmento
h:=3mm;

color encendido, apagado, fondo;

% Combinaciones de colores. Descomenta solo una de ellas

% Combinacion blanco, negro y gris
fondo:=white;
encendido:=black;
apagado:=.95white;

% Combinacion blanco y negro
% fondo:=white;
% encendido:=black;
% apagado:=white;

% Combinacion LCD
% fondo:=(.5,.99,.7);
% encendido:=(.1, .3, .2);
% apagado:=(.5,.9,.6);

% Combinación fosforo verde
% fondo:=black;
% encendido:=(.7,.99, .7);
% apagado:=(.1,.3,.1);

vardef segmento = % Macro que proporciona la forma de un segmento
save p;
pair p[];
p[0]=(-w/2,0);
p[1]=p[0] shifted (h/2, -h/2);
p[2]=p[3] shifted (-h/2, -h/2);
p[3]=(w/2, 0);
p[4]=-p[1];
p[5]=-p[2];
(for i:=0 upto 5: p[i]-- endfor cycle)
enddef;

% Macro que pinta los 7 segmentos, cada uno encendido o apagado
% segun los bits del entero que recibe como parámetro
vardef display(expr n) =
save p, r, m;
pair p[]; % Posición del centro de cada segmento
numeric r[]; % Rotación de cada segmento
numeric m;
m:=n;
% Inicialización de p y r. Los segmentos se numeran así:
%
% 0
% +----+
% 1| |2
% | 3 |
% +----+ <-- origen de coordenadas en el centro del
% 4| |5 segmento 3
% | 6 |
% +----+
%
p[3]=origin;
p[0]=p[3] shifted (0,w);
p[6]=-p[0];
p[1]=p[3] shifted (-w/2, w/2);
p[5]=-p[1];
p[4]=p[3] shifted (-w/2, -w/2);
p[2]=-p[4];
r[0]=r[3]=r[6]=0;
r[1]=r[2]=r[4]=r[5]=90;

% Pintar el rectángulo de fondo
filldraw (origin--(w+1.2h,0)--(w+1.2h,2w+1.2h)--(0,2w+1.2h)--cycle)
shifted (-w/2-1.2h/2, -w-1.2h/2) withcolor fondo;
% Y ahora los 7 segmentos
for i:=0 upto 6: % Recorrer los 7 segmentos
if (m mod 2=1): % Si activado, pintarlo en color encendido
filldraw segmento rotated r[i] shifted p[i] withcolor encendido;
draw segmento rotated r[i] shifted p[i]
withpen pencircle scaled .05w withcolor fondo;
else: % si no está activado, lo pintamos en color apagado
filldraw segmento rotated r[i] shifted p[i] withcolor apagado;
draw segmento rotated r[i] shifted p[i]
withpen pencircle scaled .05w withcolor fondo;
fi;
m:=(m - m mod 2)/2; % Desplazar para acceder al siguiente bit
endfor;
enddef;

% Y ahora generar las 128 figuras en un bucle for
for i:=0 upto 127:
beginfig(i);
display(i);
endfig;
endfor;
end;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%
% Fin de 7seg.mp
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%

¡Que aproveche!
--
JL Diaz
Responder Con Cita
  #5 (permalink)  
Antiguo 23-10-2003, 11:38:07
Jose Luis Diaz
 
Mensajes: n/a
Predeterminado Re: Dígitos segmentados

"Jesús Moreno" <jmonteverdeARROBA***ono.com> writes:

> Hola:
>
> Otra vez por aquí.
> Estoy haciendo un documento, en los que comento el
> funcionamiento de los dígitos de una calculadora. Sé que hay
> símbolos que me permiten escribir todos los dígitos usando
> "textifsym" y el paquete "ifsym", pero quiero ir un poco más
> allá.
> Necesito símbolos de varios segmentos que no tengan porqué
> formar dígitos. Por ejemplo, un carácter formado por el
> dígito superior, el medio y el derecho superior, etc.
> Si esto no lo hay, ¿cómo los puedo crear?


He programado unas macros en metapost que permiten generar cualquier
combinación de los siete segmentos. Lo que hace es asignar a cada
segmento un numero:

0
+----+
1| |2
| 3 |
+----+
4| |5
| 6 |
+----+

y recibe como parámetro una cantidad decimal entre 0 y 127. Cada bit
de esa cantidad indica si el correspondiente segmento debe estar
encendido o apagado. Así, para sacar el "3", hay que encender los
segmentos 0,2,3,5 y 6, lo que significa pasarle el parámetro
2^0+2^2+2^3+2^5+2^6 que es 109. Etc. La macro permite elegir el color
del display LCD, de los segmentos encendidos y de los segmentos
apagados. Por defecto pone el display blanco (papel), los encendidos a
negro y los apagados a gris muy clarito. Pero puedes usar cualquier
otro color si te mola más :-)

Usando esta macro he creado 127 figuras, una para cada combinación
posible (un simple bucle for), llamadas 7seg.0, 7seg.1, 7seg.2,
.... 7seg.127 (por ejemplo, la última tiene todos los segmentos
encendidos y por tanto es el "8"). Estas figuras son EPS y puedes
incluirlas en tu documento latex.

Este sería un ejemplo, para mostrar la cantidad 231, con dos "espacios
blancos" por la izquierda:

\documentclass{article}
\usepackage{graphicx}
\usepackage[latin1]{inputenc}

\DeclareGraphicsRule{*}{mps}{*}{} % Para que admita la extension .1, .2, etc

% Defino una macro para que sea más cómodo incluir las figuras,
% y que las escala además al tamaño de letra actual
\def\sseg#1{\includegraphics[width=1ex]{7seg.#1}}

\begin{document}
El resultado salió 231, es decir, el display mostró:
\fbox{\sseg{0}\sseg{0}\sseg{93}\sseg{109}\sseg{36} }.
\end{document}

Y a continuación el programa metapost que genera los 128
caracteres. Debes guardarlo con el nombre 7seg.mp y compilarlo con
mpost (forma parte de las distribuciones latex más corrientes). Si no
te aclaras con la compilación metapost, puedo enviarte por email los
128 ficheros que genera como resultado.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%
% 7seg.mp
% Genera las 128 combinaciones posibles de un display de
% siete segmentos
% (c) 2003 Jose Luis Diaz
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%
prologues:=2;

w:=1cm; % Ancho y alto de cada segmento
h:=3mm;

color encendido, apagado, fondo;

% Combinaciones de colores. Descomenta solo una de ellas

% Combinacion blanco, negro y gris
fondo:=white;
encendido:=black;
apagado:=.95white;

% Combinacion blanco y negro
% fondo:=white;
% encendido:=black;
% apagado:=white;

% Combinacion LCD
% fondo:=(.5,.99,.7);
% encendido:=(.1, .3, .2);
% apagado:=(.5,.9,.6);

% Combinación fosforo verde
% fondo:=black;
% encendido:=(.7,.99, .7);
% apagado:=(.1,.3,.1);

vardef segmento = % Macro que proporciona la forma de un segmento
save p;
pair p[];
p[0]=(-w/2,0);
p[1]=p[0] shifted (h/2, -h/2);
p[2]=p[3] shifted (-h/2, -h/2);
p[3]=(w/2, 0);
p[4]=-p[1];
p[5]=-p[2];
(for i:=0 upto 5: p[i]-- endfor cycle)
enddef;

% Macro que pinta los 7 segmentos, cada uno encendido o apagado
% segun los bits del entero que recibe como parámetro
vardef display(expr n) =
save p, r, m;
pair p[]; % Posición del centro de cada segmento
numeric r[]; % Rotación de cada segmento
numeric m;
m:=n;
% Inicialización de p y r. Los segmentos se numeran así:
%
% 0
% +----+
% 1| |2
% | 3 |
% +----+ <-- origen de coordenadas en el centro del
% 4| |5 segmento 3
% | 6 |
% +----+
%
p[3]=origin;
p[0]=p[3] shifted (0,w);
p[6]=-p[0];
p[1]=p[3] shifted (-w/2, w/2);
p[5]=-p[1];
p[4]=p[3] shifted (-w/2, -w/2);
p[2]=-p[4];
r[0]=r[3]=r[6]=0;
r[1]=r[2]=r[4]=r[5]=90;

% Pintar el rectángulo de fondo
filldraw (origin--(w+1.2h,0)--(w+1.2h,2w+1.2h)--(0,2w+1.2h)--cycle)
shifted (-w/2-1.2h/2, -w-1.2h/2) withcolor fondo;
% Y ahora los 7 segmentos
for i:=0 upto 6: % Recorrer los 7 segmentos
if (m mod 2=1): % Si activado, pintarlo en color encendido
filldraw segmento rotated r[i] shifted p[i] withcolor encendido;
draw segmento rotated r[i] shifted p[i]
withpen pencircle scaled .05w withcolor fondo;
else: % si no está activado, lo pintamos en color apagado
filldraw segmento rotated r[i] shifted p[i] withcolor apagado;
draw segmento rotated r[i] shifted p[i]
withpen pencircle scaled .05w withcolor fondo;
fi;
m:=(m - m mod 2)/2; % Desplazar para acceder al siguiente bit
endfor;
enddef;

% Y ahora generar las 128 figuras en un bucle for
for i:=0 upto 127:
beginfig(i);
display(i);
endfig;
endfor;
end;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%
% Fin de 7seg.mp
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%

¡Que aproveche!
--
JL Diaz
Responder Con Cita
  #6 (permalink)  
Antiguo 23-10-2003, 11:38:07
Jose Luis Diaz
 
Mensajes: n/a
Predeterminado Re: Dígitos segmentados

"Jesús Moreno" <jmonteverdeARROBA***ono.com> writes:

> Hola:
>
> Otra vez por aquí.
> Estoy haciendo un documento, en los que comento el
> funcionamiento de los dígitos de una calculadora. Sé que hay
> símbolos que me permiten escribir todos los dígitos usando
> "textifsym" y el paquete "ifsym", pero quiero ir un poco más
> allá.
> Necesito símbolos de varios segmentos que no tengan porqué
> formar dígitos. Por ejemplo, un carácter formado por el
> dígito superior, el medio y el derecho superior, etc.
> Si esto no lo hay, ¿cómo los puedo crear?


He programado unas macros en metapost que permiten generar cualquier
combinación de los siete segmentos. Lo que hace es asignar a cada
segmento un numero:

0
+----+
1| |2
| 3 |
+----+
4| |5
| 6 |
+----+

y recibe como parámetro una cantidad decimal entre 0 y 127. Cada bit
de esa cantidad indica si el correspondiente segmento debe estar
encendido o apagado. Así, para sacar el "3", hay que encender los
segmentos 0,2,3,5 y 6, lo que significa pasarle el parámetro
2^0+2^2+2^3+2^5+2^6 que es 109. Etc. La macro permite elegir el color
del display LCD, de los segmentos encendidos y de los segmentos
apagados. Por defecto pone el display blanco (papel), los encendidos a
negro y los apagados a gris muy clarito. Pero puedes usar cualquier
otro color si te mola más :-)

Usando esta macro he creado 127 figuras, una para cada combinación
posible (un simple bucle for), llamadas 7seg.0, 7seg.1, 7seg.2,
.... 7seg.127 (por ejemplo, la última tiene todos los segmentos
encendidos y por tanto es el "8"). Estas figuras son EPS y puedes
incluirlas en tu documento latex.

Este sería un ejemplo, para mostrar la cantidad 231, con dos "espacios
blancos" por la izquierda:

\documentclass{article}
\usepackage{graphicx}
\usepackage[latin1]{inputenc}

\DeclareGraphicsRule{*}{mps}{*}{} % Para que admita la extension .1, .2, etc

% Defino una macro para que sea más cómodo incluir las figuras,
% y que las escala además al tamaño de letra actual
\def\sseg#1{\includegraphics[width=1ex]{7seg.#1}}

\begin{document}
El resultado salió 231, es decir, el display mostró:
\fbox{\sseg{0}\sseg{0}\sseg{93}\sseg{109}\sseg{36} }.
\end{document}

Y a continuación el programa metapost que genera los 128
caracteres. Debes guardarlo con el nombre 7seg.mp y compilarlo con
mpost (forma parte de las distribuciones latex más corrientes). Si no
te aclaras con la compilación metapost, puedo enviarte por email los
128 ficheros que genera como resultado.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%
% 7seg.mp
% Genera las 128 combinaciones posibles de un display de
% siete segmentos
% (c) 2003 Jose Luis Diaz
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%
prologues:=2;

w:=1cm; % Ancho y alto de cada segmento
h:=3mm;

color encendido, apagado, fondo;

% Combinaciones de colores. Descomenta solo una de ellas

% Combinacion blanco, negro y gris
fondo:=white;
encendido:=black;
apagado:=.95white;

% Combinacion blanco y negro
% fondo:=white;
% encendido:=black;
% apagado:=white;

% Combinacion LCD
% fondo:=(.5,.99,.7);
% encendido:=(.1, .3, .2);
% apagado:=(.5,.9,.6);

% Combinación fosforo verde
% fondo:=black;
% encendido:=(.7,.99, .7);
% apagado:=(.1,.3,.1);

vardef segmento = % Macro que proporciona la forma de un segmento
save p;
pair p[];
p[0]=(-w/2,0);
p[1]=p[0] shifted (h/2, -h/2);
p[2]=p[3] shifted (-h/2, -h/2);
p[3]=(w/2, 0);
p[4]=-p[1];
p[5]=-p[2];
(for i:=0 upto 5: p[i]-- endfor cycle)
enddef;

% Macro que pinta los 7 segmentos, cada uno encendido o apagado
% segun los bits del entero que recibe como parámetro
vardef display(expr n) =
save p, r, m;
pair p[]; % Posición del centro de cada segmento
numeric r[]; % Rotación de cada segmento
numeric m;
m:=n;
% Inicialización de p y r. Los segmentos se numeran así:
%
% 0
% +----+
% 1| |2
% | 3 |
% +----+ <-- origen de coordenadas en el centro del
% 4| |5 segmento 3
% | 6 |
% +----+
%
p[3]=origin;
p[0]=p[3] shifted (0,w);
p[6]=-p[0];
p[1]=p[3] shifted (-w/2, w/2);
p[5]=-p[1];
p[4]=p[3] shifted (-w/2, -w/2);
p[2]=-p[4];
r[0]=r[3]=r[6]=0;
r[1]=r[2]=r[4]=r[5]=90;

% Pintar el rectángulo de fondo
filldraw (origin--(w+1.2h,0)--(w+1.2h,2w+1.2h)--(0,2w+1.2h)--cycle)
shifted (-w/2-1.2h/2, -w-1.2h/2) withcolor fondo;
% Y ahora los 7 segmentos
for i:=0 upto 6: % Recorrer los 7 segmentos
if (m mod 2=1): % Si activado, pintarlo en color encendido
filldraw segmento rotated r[i] shifted p[i] withcolor encendido;
draw segmento rotated r[i] shifted p[i]
withpen pencircle scaled .05w withcolor fondo;
else: % si no está activado, lo pintamos en color apagado
filldraw segmento rotated r[i] shifted p[i] withcolor apagado;
draw segmento rotated r[i] shifted p[i]
withpen pencircle scaled .05w withcolor fondo;
fi;
m:=(m - m mod 2)/2; % Desplazar para acceder al siguiente bit
endfor;
enddef;

% Y ahora generar las 128 figuras en un bucle for
for i:=0 upto 127:
beginfig(i);
display(i);
endfig;
endfor;
end;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%
% Fin de 7seg.mp
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%

¡Que aproveche!
--
JL Diaz
Responder Con Cita
  #7 (permalink)  
Antiguo 23-10-2003, 11:38:07
Jose Luis Diaz
 
Mensajes: n/a
Predeterminado Re: Dígitos segmentados

"Jesús Moreno" <jmonteverdeARROBA***ono.com> writes:

> Hola:
>
> Otra vez por aquí.
> Estoy haciendo un documento, en los que comento el
> funcionamiento de los dígitos de una calculadora. Sé que hay
> símbolos que me permiten escribir todos los dígitos usando
> "textifsym" y el paquete "ifsym", pero quiero ir un poco más
> allá.
> Necesito símbolos de varios segmentos que no tengan porqué
> formar dígitos. Por ejemplo, un carácter formado por el
> dígito superior, el medio y el derecho superior, etc.
> Si esto no lo hay, ¿cómo los puedo crear?


He programado unas macros en metapost que permiten generar cualquier
combinación de los siete segmentos. Lo que hace es asignar a cada
segmento un numero:

0
+----+
1| |2
| 3 |
+----+
4| |5
| 6 |
+----+

y recibe como parámetro una cantidad decimal entre 0 y 127. Cada bit
de esa cantidad indica si el correspondiente segmento debe estar
encendido o apagado. Así, para sacar el "3", hay que encender los
segmentos 0,2,3,5 y 6, lo que significa pasarle el parámetro
2^0+2^2+2^3+2^5+2^6 que es 109. Etc. La macro permite elegir el color
del display LCD, de los segmentos encendidos y de los segmentos
apagados. Por defecto pone el display blanco (papel), los encendidos a
negro y los apagados a gris muy clarito. Pero puedes usar cualquier
otro color si te mola más :-)

Usando esta macro he creado 127 figuras, una para cada combinación
posible (un simple bucle for), llamadas 7seg.0, 7seg.1, 7seg.2,
.... 7seg.127 (por ejemplo, la última tiene todos los segmentos
encendidos y por tanto es el "8"). Estas figuras son EPS y puedes
incluirlas en tu documento latex.

Este sería un ejemplo, para mostrar la cantidad 231, con dos "espacios
blancos" por la izquierda:

\documentclass{article}
\usepackage{graphicx}
\usepackage[latin1]{inputenc}

\DeclareGraphicsRule{*}{mps}{*}{} % Para que admita la extension .1, .2, etc

% Defino una macro para que sea más cómodo incluir las figuras,
% y que las escala además al tamaño de letra actual
\def\sseg#1{\includegraphics[width=1ex]{7seg.#1}}

\begin{document}
El resultado salió 231, es decir, el display mostró:
\fbox{\sseg{0}\sseg{0}\sseg{93}\sseg{109}\sseg{36} }.
\end{document}

Y a continuación el programa metapost que genera los 128
caracteres. Debes guardarlo con el nombre 7seg.mp y compilarlo con
mpost (forma parte de las distribuciones latex más corrientes). Si no
te aclaras con la compilación metapost, puedo enviarte por email los
128 ficheros que genera como resultado.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%
% 7seg.mp
% Genera las 128 combinaciones posibles de un display de
% siete segmentos
% (c) 2003 Jose Luis Diaz
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%
prologues:=2;

w:=1cm; % Ancho y alto de cada segmento
h:=3mm;

color encendido, apagado, fondo;

% Combinaciones de colores. Descomenta solo una de ellas

% Combinacion blanco, negro y gris
fondo:=white;
encendido:=black;
apagado:=.95white;

% Combinacion blanco y negro
% fondo:=white;
% encendido:=black;
% apagado:=white;

% Combinacion LCD
% fondo:=(.5,.99,.7);
% encendido:=(.1, .3, .2);
% apagado:=(.5,.9,.6);

% Combinación fosforo verde
% fondo:=black;
% encendido:=(.7,.99, .7);
% apagado:=(.1,.3,.1);

vardef segmento = % Macro que proporciona la forma de un segmento
save p;
pair p[];
p[0]=(-w/2,0);
p[1]=p[0] shifted (h/2, -h/2);
p[2]=p[3] shifted (-h/2, -h/2);
p[3]=(w/2, 0);
p[4]=-p[1];
p[5]=-p[2];
(for i:=0 upto 5: p[i]-- endfor cycle)
enddef;

% Macro que pinta los 7 segmentos, cada uno encendido o apagado
% segun los bits del entero que recibe como parámetro
vardef display(expr n) =
save p, r, m;
pair p[]; % Posición del centro de cada segmento
numeric r[]; % Rotación de cada segmento
numeric m;
m:=n;
% Inicialización de p y r. Los segmentos se numeran así:
%
% 0
% +----+
% 1| |2
% | 3 |
% +----+ <-- origen de coordenadas en el centro del
% 4| |5 segmento 3
% | 6 |
% +----+
%
p[3]=origin;
p[0]=p[3] shifted (0,w);
p[6]=-p[0];
p[1]=p[3] shifted (-w/2, w/2);
p[5]=-p[1];
p[4]=p[3] shifted (-w/2, -w/2);
p[2]=-p[4];
r[0]=r[3]=r[6]=0;
r[1]=r[2]=r[4]=r[5]=90;

% Pintar el rectángulo de fondo
filldraw (origin--(w+1.2h,0)--(w+1.2h,2w+1.2h)--(0,2w+1.2h)--cycle)
shifted (-w/2-1.2h/2, -w-1.2h/2) withcolor fondo;
% Y ahora los 7 segmentos
for i:=0 upto 6: % Recorrer los 7 segmentos
if (m mod 2=1): % Si activado, pintarlo en color encendido
filldraw segmento rotated r[i] shifted p[i] withcolor encendido;
draw segmento rotated r[i] shifted p[i]
withpen pencircle scaled .05w withcolor fondo;
else: % si no está activado, lo pintamos en color apagado
filldraw segmento rotated r[i] shifted p[i] withcolor apagado;
draw segmento rotated r[i] shifted p[i]
withpen pencircle scaled .05w withcolor fondo;
fi;
m:=(m - m mod 2)/2; % Desplazar para acceder al siguiente bit
endfor;
enddef;

% Y ahora generar las 128 figuras en un bucle for
for i:=0 upto 127:
beginfig(i);
display(i);
endfig;
endfor;
end;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%
% Fin de 7seg.mp
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%

¡Que aproveche!
--
JL Diaz
Responder Con Cita
  #8 (permalink)  
Antiguo 23-10-2003, 11:38:07
Jose Luis Diaz
 
Mensajes: n/a
Predeterminado Re: Dígitos segmentados

"Jesús Moreno" <jmonteverdeARROBA***ono.com> writes:

> Hola:
>
> Otra vez por aquí.
> Estoy haciendo un documento, en los que comento el
> funcionamiento de los dígitos de una calculadora. Sé que hay
> símbolos que me permiten escribir todos los dígitos usando
> "textifsym" y el paquete "ifsym", pero quiero ir un poco más
> allá.
> Necesito símbolos de varios segmentos que no tengan porqué
> formar dígitos. Por ejemplo, un carácter formado por el
> dígito superior, el medio y el derecho superior, etc.
> Si esto no lo hay, ¿cómo los puedo crear?


He programado unas macros en metapost que permiten generar cualquier
combinación de los siete segmentos. Lo que hace es asignar a cada
segmento un numero:

0
+----+
1| |2
| 3 |
+----+
4| |5
| 6 |
+----+

y recibe como parámetro una cantidad decimal entre 0 y 127. Cada bit
de esa cantidad indica si el correspondiente segmento debe estar
encendido o apagado. Así, para sacar el "3", hay que encender los
segmentos 0,2,3,5 y 6, lo que significa pasarle el parámetro
2^0+2^2+2^3+2^5+2^6 que es 109. Etc. La macro permite elegir el color
del display LCD, de los segmentos encendidos y de los segmentos
apagados. Por defecto pone el display blanco (papel), los encendidos a
negro y los apagados a gris muy clarito. Pero puedes usar cualquier
otro color si te mola más :-)

Usando esta macro he creado 127 figuras, una para cada combinación
posible (un simple bucle for), llamadas 7seg.0, 7seg.1, 7seg.2,
.... 7seg.127 (por ejemplo, la última tiene todos los segmentos
encendidos y por tanto es el "8"). Estas figuras son EPS y puedes
incluirlas en tu documento latex.

Este sería un ejemplo, para mostrar la cantidad 231, con dos "espacios
blancos" por la izquierda:

\documentclass{article}
\usepackage{graphicx}
\usepackage[latin1]{inputenc}

\DeclareGraphicsRule{*}{mps}{*}{} % Para que admita la extension .1, .2, etc

% Defino una macro para que sea más cómodo incluir las figuras,
% y que las escala además al tamaño de letra actual
\def\sseg#1{\includegraphics[width=1ex]{7seg.#1}}

\begin{document}
El resultado salió 231, es decir, el display mostró:
\fbox{\sseg{0}\sseg{0}\sseg{93}\sseg{109}\sseg{36} }.
\end{document}

Y a continuación el programa metapost que genera los 128
caracteres. Debes guardarlo con el nombre 7seg.mp y compilarlo con
mpost (forma parte de las distribuciones latex más corrientes). Si no
te aclaras con la compilación metapost, puedo enviarte por email los
128 ficheros que genera como resultado.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%
% 7seg.mp
% Genera las 128 combinaciones posibles de un display de
% siete segmentos
% (c) 2003 Jose Luis Diaz
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%
prologues:=2;

w:=1cm; % Ancho y alto de cada segmento
h:=3mm;

color encendido, apagado, fondo;

% Combinaciones de colores. Descomenta solo una de ellas

% Combinacion blanco, negro y gris
fondo:=white;
encendido:=black;
apagado:=.95white;

% Combinacion blanco y negro
% fondo:=white;
% encendido:=black;
% apagado:=white;

% Combinacion LCD
% fondo:=(.5,.99,.7);
% encendido:=(.1, .3, .2);
% apagado:=(.5,.9,.6);

% Combinación fosforo verde
% fondo:=black;
% encendido:=(.7,.99, .7);
% apagado:=(.1,.3,.1);

vardef segmento = % Macro que proporciona la forma de un segmento
save p;
pair p[];
p[0]=(-w/2,0);
p[1]=p[0] shifted (h/2, -h/2);
p[2]=p[3] shifted (-h/2, -h/2);
p[3]=(w/2, 0);
p[4]=-p[1];
p[5]=-p[2];
(for i:=0 upto 5: p[i]-- endfor cycle)
enddef;

% Macro que pinta los 7 segmentos, cada uno encendido o apagado
% segun los bits del entero que recibe como parámetro
vardef display(expr n) =
save p, r, m;
pair p[]; % Posición del centro de cada segmento
numeric r[]; % Rotación de cada segmento
numeric m;
m:=n;
% Inicialización de p y r. Los segmentos se numeran así:
%
% 0
% +----+
% 1| |2
% | 3 |
% +----+ <-- origen de coordenadas en el centro del
% 4| |5 segmento 3
% | 6 |
% +----+
%
p[3]=origin;
p[0]=p[3] shifted (0,w);
p[6]=-p[0];
p[1]=p[3] shifted (-w/2, w/2);
p[5]=-p[1];
p[4]=p[3] shifted (-w/2, -w/2);
p[2]=-p[4];
r[0]=r[3]=r[6]=0;
r[1]=r[2]=r[4]=r[5]=90;

% Pintar el rectángulo de fondo
filldraw (origin--(w+1.2h,0)--(w+1.2h,2w+1.2h)--(0,2w+1.2h)--cycle)
shifted (-w/2-1.2h/2, -w-1.2h/2) withcolor fondo;
% Y ahora los 7 segmentos
for i:=0 upto 6: % Recorrer los 7 segmentos
if (m mod 2=1): % Si activado, pintarlo en color encendido
filldraw segmento rotated r[i] shifted p[i] withcolor encendido;
draw segmento rotated r[i] shifted p[i]
withpen pencircle scaled .05w withcolor fondo;
else: % si no está activado, lo pintamos en color apagado
filldraw segmento rotated r[i] shifted p[i] withcolor apagado;
draw segmento rotated r[i] shifted p[i]
withpen pencircle scaled .05w withcolor fondo;
fi;
m:=(m - m mod 2)/2; % Desplazar para acceder al siguiente bit
endfor;
enddef;

% Y ahora generar las 128 figuras en un bucle for
for i:=0 upto 127:
beginfig(i);
display(i);
endfig;
endfor;
end;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%
% Fin de 7seg.mp
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%

¡Que aproveche!
--
JL Diaz
Responder Con Cita
  #9 (permalink)  
Antiguo 23-10-2003, 11:38:07
Jose Luis Diaz
 
Mensajes: n/a
Predeterminado Re: Dígitos segmentados

"Jesús Moreno" <jmonteverdeARROBA***ono.com> writes:

> Hola:
>
> Otra vez por aquí.
> Estoy haciendo un documento, en los que comento el
> funcionamiento de los dígitos de una calculadora. Sé que hay
> símbolos que me permiten escribir todos los dígitos usando
> "textifsym" y el paquete "ifsym", pero quiero ir un poco más
> allá.
> Necesito símbolos de varios segmentos que no tengan porqué
> formar dígitos. Por ejemplo, un carácter formado por el
> dígito superior, el medio y el derecho superior, etc.
> Si esto no lo hay, ¿cómo los puedo crear?


He programado unas macros en metapost que permiten generar cualquier
combinación de los siete segmentos. Lo que hace es asignar a cada
segmento un numero:

0
+----+
1| |2
| 3 |
+----+
4| |5
| 6 |
+----+

y recibe como parámetro una cantidad decimal entre 0 y 127. Cada bit
de esa cantidad indica si el correspondiente segmento debe estar
encendido o apagado. Así, para sacar el "3", hay que encender los
segmentos 0,2,3,5 y 6, lo que significa pasarle el parámetro
2^0+2^2+2^3+2^5+2^6 que es 109. Etc. La macro permite elegir el color
del display LCD, de los segmentos encendidos y de los segmentos
apagados. Por defecto pone el display blanco (papel), los encendidos a
negro y los apagados a gris muy clarito. Pero puedes usar cualquier
otro color si te mola más :-)

Usando esta macro he creado 127 figuras, una para cada combinación
posible (un simple bucle for), llamadas 7seg.0, 7seg.1, 7seg.2,
.... 7seg.127 (por ejemplo, la última tiene todos los segmentos
encendidos y por tanto es el "8"). Estas figuras son EPS y puedes
incluirlas en tu documento latex.

Este sería un ejemplo, para mostrar la cantidad 231, con dos "espacios
blancos" por la izquierda:

\documentclass{article}
\usepackage{graphicx}
\usepackage[latin1]{inputenc}

\DeclareGraphicsRule{*}{mps}{*}{} % Para que admita la extension .1, .2, etc

% Defino una macro para que sea más cómodo incluir las figuras,
% y que las escala además al tamaño de letra actual
\def\sseg#1{\includegraphics[width=1ex]{7seg.#1}}

\begin{document}
El resultado salió 231, es decir, el display mostró:
\fbox{\sseg{0}\sseg{0}\sseg{93}\sseg{109}\sseg{36} }.
\end{document}

Y a continuación el programa metapost que genera los 128
caracteres. Debes guardarlo con el nombre 7seg.mp y compilarlo con
mpost (forma parte de las distribuciones latex más corrientes). Si no
te aclaras con la compilación metapost, puedo enviarte por email los
128 ficheros que genera como resultado.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%
% 7seg.mp
% Genera las 128 combinaciones posibles de un display de
% siete segmentos
% (c) 2003 Jose Luis Diaz
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%
prologues:=2;

w:=1cm; % Ancho y alto de cada segmento
h:=3mm;

color encendido, apagado, fondo;

% Combinaciones de colores. Descomenta solo una de ellas

% Combinacion blanco, negro y gris
fondo:=white;
encendido:=black;
apagado:=.95white;

% Combinacion blanco y negro
% fondo:=white;
% encendido:=black;
% apagado:=white;

% Combinacion LCD
% fondo:=(.5,.99,.7);
% encendido:=(.1, .3, .2);
% apagado:=(.5,.9,.6);

% Combinación fosforo verde
% fondo:=black;
% encendido:=(.7,.99, .7);
% apagado:=(.1,.3,.1);

vardef segmento = % Macro que proporciona la forma de un segmento
save p;
pair p[];
p[0]=(-w/2,0);
p[1]=p[0] shifted (h/2, -h/2);
p[2]=p[3] shifted (-h/2, -h/2);
p[3]=(w/2, 0);
p[4]=-p[1];
p[5]=-p[2];
(for i:=0 upto 5: p[i]-- endfor cycle)
enddef;

% Macro que pinta los 7 segmentos, cada uno encendido o apagado
% segun los bits del entero que recibe como parámetro
vardef display(expr n) =
save p, r, m;
pair p[]; % Posición del centro de cada segmento
numeric r[]; % Rotación de cada segmento
numeric m;
m:=n;
% Inicialización de p y r. Los segmentos se numeran así:
%
% 0
% +----+
% 1| |2
% | 3 |
% +----+ <-- origen de coordenadas en el centro del
% 4| |5 segmento 3
% | 6 |
% +----+
%
p[3]=origin;
p[0]=p[3] shifted (0,w);
p[6]=-p[0];
p[1]=p[3] shifted (-w/2, w/2);
p[5]=-p[1];
p[4]=p[3] shifted (-w/2, -w/2);
p[2]=-p[4];
r[0]=r[3]=r[6]=0;
r[1]=r[2]=r[4]=r[5]=90;

% Pintar el rectángulo de fondo
filldraw (origin--(w+1.2h,0)--(w+1.2h,2w+1.2h)--(0,2w+1.2h)--cycle)
shifted (-w/2-1.2h/2, -w-1.2h/2) withcolor fondo;
% Y ahora los 7 segmentos
for i:=0 upto 6: % Recorrer los 7 segmentos
if (m mod 2=1): % Si activado, pintarlo en color encendido
filldraw segmento rotated r[i] shifted p[i] withcolor encendido;
draw segmento rotated r[i] shifted p[i]
withpen pencircle scaled .05w withcolor fondo;
else: % si no está activado, lo pintamos en color apagado
filldraw segmento rotated r[i] shifted p[i] withcolor apagado;
draw segmento rotated r[i] shifted p[i]
withpen pencircle scaled .05w withcolor fondo;
fi;
m:=(m - m mod 2)/2; % Desplazar para acceder al siguiente bit
endfor;
enddef;

% Y ahora generar las 128 figuras en un bucle for
for i:=0 upto 127:
beginfig(i);
display(i);
endfig;
endfor;
end;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%
% Fin de 7seg.mp
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%

¡Que aproveche!
--
JL Diaz
Responder Con Cita
  #10 (permalink)  
Antiguo 23-10-2003, 22:12:03
Jesús Moreno
 
Mensajes: n/a
Predeterminado Re: Dígitos segmentados

Gracias, pero me encuentro con un problema:

He compilado con mpost, y me ha generado todos los archivos.
Sólo he tenido que hacer una modificación al código tex que
mandaste:
No admitía la línea

\DeclareGraphicsRule{*}{mps}{*}{}

Supongo que te referías a {eps}. Con esto funcionó la
compilación del tex. El problema es que no me visualiza el
caracter. Yo uso WinEdt y la distribución latex de MiKTeX.
También me bajé el programa visor de GhostScript, pues la
aplicación YAP me lo pedía. Con esto, desaparecieron los
errores, pero sigue sin verse el caracter en el DVI. Yo he
tenido que meter todos los archivos que me generó el mpost
en la misma carpeta donde tengo el archivo tex. ¿Debo
colocarlo en otro lado?

Muchas gracias y perdona mi desconocimiento del tema.


Responder Con Cita
 
Respuesta


Herramientas
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Trackbacks are habilitado
Pingbacks are habilitado
Refbacks are habilitado


Temas Similares
Tema Autor Foro Respuestas Último mensaje
Funcion + digitos finales! Javier Esquinas Newsgroup es.ciencia.matematicas 48 03-06-2008 19:37:18
Mas dígitos al final León-Sotelo Newsgroup es.ciencia.matematicas 10 04-03-2008 10:46:34
Dígitos olímpicos León-Sotelo Newsgroup es.ciencia.matematicas 6 27-02-2008 06:52:04
Multicanal 16 o 32 digitos jeyme@wanadoo.es Newsgroup es.rec.tv.decodificacion 2 08-12-2007 05:16:39
Factorial del cuenta dígitos León-Sotelo Newsgroup es.ciencia.matematicas 3 30-09-2007 10:48:14





Powered by: vBulletin, Versión 3.6.8
Derechos de Autor ©2000 - 2008, Jelsoft Enterprises Ltd.

LinkBacks Enabled by vBSEO 3.1.0 © 2007, Crawlability, Inc.