Está en la página 1de 104

Simulador didctico de

Tallado de Engranajes Rectos






Daniel Costas Rodriguez
Eduardo Gmez Garca




























Versin 2.01 - Octubre 2011



i
NDICE


Lista de smbolos ........................................................................................................................ iii


!"#$T%LO 1. &'TRO(%!!&)' ............................................................................................. 1

!"#$T%LO 2. E'*R"'"+ES RE!TOS .................................................................................. 2
2.1. Terminologa em,leada ..................................................................................................2
2.1.1. 'umero de dientes ................................................................................................ 2
2.1.2. !ircun-erencia de ,aso ......................................................................................... .
2.1... /dulo .........................................0..................................................................... .
2.1.1. #aso ...................................................................................................................... .
2.1.2. !ircun-erencia de cabe3a ...................................................................................... .
2.1.4. !ircun-erencia de ra3 ........................................................................................... .
2.1.5. "ltura de cabe3a .................................................................................................... 1
2.1.6. "ltura de ,ie .......................................................................................................... 1
2.1.7. "ltura del diente .................................................................................................... 1
2.1.10. "ngulo de ,resin ............................................................................................... 1
2.2. #er-il del diente ............................................................................................................... 1
2.2.1. La in8oluta ............................................................................................................ 1
2.2.2. El arco de circun-erencia ....................................................................................... 5
2... Soca8acin en el tallado ................................................................................................... 6
2.1. /9todos de -abricacin ................................................................................................... 7
2.1.1. :resa ...................................................................................................................... 7
2.1.2. *eneracin ,or cremallera ..................................................................................... 10
2.1... /ecani3acin ,or -resa generatri3 ......................................................................... 10
2.1.1. /9todo de :ello;s ................................................................................................ 11
2.2. /9todos de acabado ........................................................................................................ 12
2.2.1. Rascado mecnico .................................................................................................. 12
2.2.2. Recti-icado ,or abrasi8os ....................................................................................... 12
2.2... La,eado ................................................................................................................. 12
2.2.1. #ulido ..................................................................................................................... 1.
2.2.1. <ru=ido ....................................................................................................................1.
2.4. /9todos de simulacin ................................................................................................... 1.

!"#$T%LO .. L" S&/%L"!&)' ............................................................................................. 12
..1. >erramientas ................................................................................................................... 12
..1.1.!?? ......................................................................................................................... 12
..1.2. O,en*L .................................................................................................................. 14
..1... *L%T ..................................................................................................................... 16
..1.1. *L%& ...................................................................................................................... 16
..2 (ise=o .............................................................................................................................. 17
..2.1. La simulacin ......................................................................................................... 17
..2.2. !oe-iciente de des,la3amiento .............................................................................. 2.
..2.2. #er-il del diente de cremallera estndar ................................................................. 2.
..2... #er-il del diente seg@n &SO 4..4 ........................................................................... 21
ii
..2.1. #er-il de diente asim9trico .................................................................................... .1
..2.2. (iente con ,er-il circular ....................................................................................... .2

!"#$T%LO 1. EL #RO*R"/" S&/%L"(OR ..................................................................... 10
1.1. La /ascara &nicial ......................................................................................................... 10
1.2. !ontroles comunes a todas las o,ciones ....................................................................... 11
1.2.1. Seleccin del color ................................................................................................ 11
1.2.2. O,ciones ............................................................................................................... 11
1.2.2.1. "ngulo girado ,or tallada ............................................................................ 11
1.2.2.2. <otn Reiniciar ............................................................................................ 12
1.2.2... <otn "utomticoA/anual .......................................................................... 12
1.2.2.1. <otn BSiguiente CCD ................................................................................... 12
1.2.2.2. <otn BEE "nteriorD ..................................................................................... 12
1.2.2.4. !ircun-erencia de ,aso ................................................................................ 12
1.2.2.5. !ircun-erencia de -ondo .............................................................................. 12
1.2.2.6. !ontrol de imagen ........................................................................................ 12
1... #anel de (atos en la Simulacin estndar ...................................................................... 1.
1.1. #anel de (atos en la Simulacin eF,erimental 000000000........................... 11
1.2. #anel &SO 4..4 0000000000000000000000000000 11
1.4. #anel de diente asim9trico 00000000000000000000000012
1.5. La -lecGa de de-ormacin circular 000000000000000000.......... 12
1.6. La Simulacin Estndar ................................................................................................ 14
1.6.1. *eneracin de un engranaje recto ........................................................................ 14
1.6.2. &n-luencia del ngulo girado en la -ormacin del ,er-il ......................................... 16
1.7. La Simulacin eF,erimental 000000000....................................................... 17
1.7.1. Engranaje recto ...................................................................................................... 17
1.7.2. Engranaje recto con recomendacin &SO 4..4 ...................................................... 20
1.7... &n-luencia del ngulo girado ,or tallada en el dise=o &SO 4..4 ............................ 21
1.7.1. Engranaje recto con diente asim9trico ................................................................... 22
1.7.2. Engranaje recto con diente asim9trico con dise=o &SO 4..4 ................................ 22
1.10. La de-ormacin circular 00.................................................0................................... 2.

!"#$T%LO 2. EL !O(&*O :%E'TE 0000..................................................................... 22
2.1. main.c,, 0000.......................................................................................................... 22
2.1.1. :uncion main .00................................................................................................ 24
2.1.2. :uncion glui&nit ..0................................................................................................ 25
2.1... :uncion gluiHcontrol ............................................................................................... 40
2.1.1. :uncion 8HgluiHcontrol ........................................................................................... 50
2.1.2. :uncion idle 0000........................................................................................... 61
2.1.4. :uncion main(is,laI ............................................................................................. 70
2.2. mecanismos.c,, 0000............................................................................................... 7.
2.2.1. :uncion !ilindro 0................................................................................................ 7.
2.2.2. :uncion !ircun-erencia 0...................................................................................... 71
2.2... :uncion !remallera 00........................................................................................ 72

<&<L&O*R":$" ........................................................................................................................ 76


ii

LISTA DE SMBOLOS


f :lecGa de de-ormacin del diente recto en un arco de circun-erencia
h "ltura del diente
m /dulo
p #aso
r
b
Radio de la circun-erencia de base o interior del engranaje
r
c
Radio de la circun-erencia de cabe3a o eFterior del engranaje
r
p
Radio de la circun-erencia de ,aso del engranaje
O,en*L O,en *ra,Gics LibrarI
"#& ",,lication #rogramming &nter-ace
"R< O,en*L "rcGitectural Re8ie; <orrad
E !entro de la circun-erencia de redondeo de la cabe3a del diente
*L%T TGe O,en*L %tilitI TooJit
*L%& O,en*L %ser &nter-ace
*'% *'% is 'ot %niF
R*<" Red *reen <lue "l,Ga
S
pr
%ndercutK rebaje lateral del dienteK &SO 4..4
Z '@mero de dientes del engranaje
"ngulo de ,resin

fP
Radio de cur8atura en la cabe3a del dienteK &SO 4..4
"ngulo girado ,or el engranaje en cada tallada
Segundo ngulo de ,resin en dientes asim9tricos
1
CAPTULO 1. INTRODUCCIN


Se pretende la construccin de un simulador en tiempo real del tallado de engranajes rectos.
Para la asignatura de Construccin y Ensayo de Maquinas II ste alumno realizo un trabajo sobre
la realizacin de un simulador de tallado de engranajes rectos en el que mediante tcnicas de ray
tracing se simulaba! "otograma a "otograma! las posiciones ocupadas por la cremallera de tallado
como el engranaje. El ensamble de los "otogramas daba lugar a una simulacin de como en un
disco circular una cremallera recta generaba un engranaje.

El trabajo sir#i de base para la presentacin de un cartel en el III Congreso Iberoamericano de
In"orm$tica Educati#a %Aplicacin de los programas basados en las tcnicas 'Ray Tracer' a la
didctica de la Mecnica% &'ulio (uentes! Eduardo )mez! *aniel Costas+. Sin embargo! como
,erramienta de simulacin presentaba de"iciencias! como era el largo tiempo que lle#aba generar
cada "otograma mediante ray tracing! as- como la imposibilidad de cambiar los par$metros de
dise.o y obtener un resultado mas o menos inmediato en el que comprobar el resultado obtenido.

Por ello! se plantea la posibilidad de construir un simulador que en tiempo real genere el per"il
del tallado de un engranaje recto pudiendo modi"icar los par$metros de dise.o y obser#ar los
resultados obtenidos.

El simulador podr-a ser#ir como complemento a los estudiantes de ingenier-a mec$nica! de
"orma que a la #ez que estudian las caracter-sticas de un engranaje recto! pueden dise.arlo! y
poder obser#ar "enmenos como la penetracin &soca#acin+ del diente! as- como comprobar que
los par$metros usados para el dise.o de un engranaje son correctos.

Se pretende tambin que el simulador pueda ser modi"icable para poder e/perimentar con
per"iles de cremallera di"erentes del per"il trapezoidal! mediante el dise.o de cremalleras con
dientes modi"icados.

Por ultimo! se busca que el programa sea independiente del sistema operati#o utilizado! con lo
que se presta atencin a que las ,erramientas utilizadas para su desarrollo puedan ser utilizadas
tanto en plata"ormas 0indo1s! como 2ni/.

*ado el car$cter did$ctico que se pretende! el programa se distribuye en "orma de cdigo
"uente! acogindose a la licencia )32 pudindose modi"icar y copiar! cit$ndose 4nicamente el
origen del mismo


2
CAPTULO 2. ENGRANAJES RECTOS


Los engranajes son elementos mecnicos dentados que rotan alrededor de un eje, con la
finalidad de transmitir potencia entre dos puntos fijos y a una distancia determinada, esto es
posible gracias a la accin conjugada y sucesiva de los dientes de una rueda conductora o motriz
hacia una rueda conducida, manteniendo siempre una relacin de transmisin constante durante
su contacto.

Si los engranajes estn formados por un cuerpo cilndrico que dispone de dientes ubicados de
forma paralela al eje de rotacin del engranaje se denominan engranajes cilndricos rectos.
!dems se denominan eternos si los dientes son tallados en la periferia del elemento y con una
orientacin del diente hacia fuera.



2.!. Ter"inologa e"#leada

"efinamos la terminologa empleada en estos elementos.


#igura 2.$ %erminologa
$


2.$.$. &umero de dientes, Z

's el n(mero de secciones continuas que se ubican en el permetro de la rueda de manera
uniformemente espaciada y cuya finalidad es garantizar la transmisin constante del movimiento
entre los engranajes conjugados.


$
Shigley )* "+S',- '& +&.'&+'/+! 0'1!&+1!* Se2ta 'dicin* 0c./!345+LL* 062ico * 2772* pg. 892
:
2.$.2. 1ircunferencia de paso o circunferencia primitiva

La circunferencia de paso o primitiva es la de contacto entre los dientes que determina la
relacin de transmisin y es la base de la medicin de los engranajes. 'n los engranajes
intercambiables las circunferencias primitivas de las ruedas dentadas conjugadas son tangentes, y
en este caso estos crculos imaginarios ruedan uno sobre otro sin resbalar.


2.$.:. 0dulo

'l mdulo, m, es una caracterstica de magnitud y representa la unidad del sistema de
engranajes normalizados. ;iene dado por el cociente del dimetro de la circunferencia primitiva
entre el n(mero de dientes

Z
r
m
p

=
2
<2.$=

Los valores del mdulo estn normalizados por la norma >&' $877? <ver !@'&"+1' +;= que
recomienda como valores a usarA

$.77 $.2? $.?7 2.77 2.?7 :.77 9.77
?.77 B.77 8.77 $7.77 $2.77 $B.77 27.77
2?.77 :2.77 97.77 ?7.77

2.$.9. @aso

'l paso, p, es la distancia medida sobre la circunferencia primitiva entre un determinado punto
de un diente y el punto correspondiente de un diente inmediato. 'l paso es igual a la suma del
grueso del diente y el ancho entre los dientes consecutivos. Se verifica que

= m p
<2.2=


2.$.?. 1ircunferencia de cabeza o e2terior

La circunferencia e2terior es la que limita los e2tremos e2teriores de los dientes. 'l cilindro
e2terior envuelve o limita a un engranaje. 'l dimetro de esta circunferencia se llama dimetro
e2terior. 'l valor del radio esta normalizado a

+ =
Z
r r
p c
2
$ <2.:=


2.$.B. 1ircunferencia de raz o interior

La circunferencia interior es la que limita los fondos de los dientes. 'l dimetro de esta
circunferencia se llama dimetro de base. 'l valor del radio esta normalizado a

9

=
Z
r r
p b
? . 2
$ <2.9=


2.$.C. !ltura de cabeza <!dendo=

's la distancia radial entre la circunferencia primitiva y la circunferencia e2terior o de cabeza.


2.$.8. !ltura de pie o raz <"ependo=

's la distancia radial desde la circunferencia primitiva hasta la circunferencia de base.


2.$.D. !ltura del diente

's la distancia radial entre la circunferencia de base y la circunferencia e2terior. Se
corresponde con la suma de las alturas de cabeza y pie.

b c
r r h = <2.?=

2.$.$7. !ngulo de presin

'l ngulo de presin, , es el que forman los flancos de los dientes con la perpendicular a la
circunferencia primitiva.



2.2. Per$il del diente

Los perfiles de los dientes de los engranajes deben cumplir la le% general del engraneA EPara
que la relacin de transmisin entre dos perfiles se mantenga constante, es necesario y suficiente
que la normal a los perfiles en el punto de contacto pase en todo instante por un punto fijo de la
lnea de centrosF. 1uando los perfiles cumplen 6sta condicin se dice que son #er$iles
conj&gados.

"e las muchas formas posibles para los perfiles de diente, solamente se han estandarizado la
cicloide y la in'ol&ta envolvente de circunferencia. La cicloide se emple inicialmente,
aunque ahora se ha reemplazado por la involuta en todas la aplicaciones e2cepto en la industria
relojera. La involuta tiene varias ventajas, siendo las ms importantes su facilidad de fabricacin
y el hecho de que la distancia entre los centros de dos engranajes de involuta puede variar sin
cambiar la relacin de velocidades.


2.2.$. La involuta o envolvente de circunferencia

La involuta se define como el lugar geom6trico de los puntos de un plano que verifican que la
tangente por ellos a una circunferencia, llamada circunferencia de base, define un punto de
?
tangencia que dista del punto considerado una distancia igual a la longitud del arco de la
circunferencia de base limitado por el punto de tangencia y uno dado de la circunferencia.


#igura 2.2 +nvoluta
2


"icho de otra forma, en la figura 2.2, los puntos T de la involuta cumplen que la distancia AT
es igual al arco (A, siendo ( el punto a partir del cual se inicia, denominado origen de la
involuta.

es el radio instantneo de curvatura de la involuta y r el radio a cualquier punto T de la
curva. Si el radio de crculo de base se designa como r
b
, entonces,

= < + =
b
r <2.B=

donde G es el ngulo comprendido entre los radiovectores que definen el origen de la involuta y
cualquier punto sobre la involuta, y H es el ngulo comprendido entre los radiovectores que
definen a cualquier punto % de la involuta y el origen ! en el circulo de base de la lnea
generadora correspondiente. @uesto que -%! es un tringulo rectngulo,

tan =
b
r <2.C=

!l resolver las ecuaciones <2.B= y <2.C= en forma simultnea para eliminar a se obtiene

= tan


que se puede escribir como

= tan inv
<2.8=


2
Shigley )* %'-/I! "' 0JK>+&!S L 0'1!&+S0-S*0c./!345+LL* 062ico* $DD:* pg. 28$
B
y define la funcin involuta. 'l ngulo H en esta ecuacin es el ngulo de presin variable de la
involuta, y se debe e2presar en radianes.

's posible determinar el grosor del diente cuyo perfil esta formado sim6tricamente por una
involuta, en cualquier punto del perfil si se conoce el espesor del diente en cualquier otro punto
como puede ser, el espesor del diente sobre la circunferencia de paso del engranaje. ;emoslo en
la figura 2.: donde se define

r
b
M radio del crculo base
r
p
M radio del circulo de paso
r M radio en el que se va a determinar el espesor del diente
t
p
M espesor del diente a lo largo del circulo de paso
t M espesor a lo largo del arco buscado
M ngulo de presin correspondiente al radio de paso r
p
M ngulo de presin correspondiente a cualquier punto T

M espesor angular de medio diente en el circulo de paso


M espesor angular de medio diente en cualquier punto T


#igura 2.: .rosor del diente de involuta
:



Los espesores de medio diente en los puntos A y T son
p p
p
r
t
=
2
r
t
=
2
<2.D=


:
Shigley )* %'-/I! "' 0JK>+&!S L 0'1!&+S0-S*0c./!345+LL* 062ico* $DD:* pg. 282
C
de tal manera que

p
p
p
r
t

=
2

r
t

=
2

<2.$7=

!hora se puede escribir que

r
t
r
t
inv inv
p
p
p

= =
2 2

<2.$$=

'l espesor del diente correspondiente a cualquier punto T se obtiene resolviendo la ecuacin
<2.$$= para tA

= inv inv
r
t
r t
p
p
2
2 <2.$2=


La mayora de los engranajes se realizan usando como perfil del diente la envolvente de
circunferencia de forma sim6trica, aunque es posible encontrar engranajes en la industria en que
el perfil del diente se forma con dos envolventes de circunferencia que no son sim6tricas, con lo
que a efectos de calculo del grosor del diente, el calculo se realiza de forma similar teniendo en
cuenta la asimetra en la realizacin de los mismos.



2.2.2. 'l arco de circunferencia

!unque no se usa en la industria, se plantea la posibilidad terica de que el perfil del diente sea
circular, caso contemplado en la bibliografa
9
clsica de engranajes.

'ste tipo de perfiles se suele estudiar en funcin de radio de la circunferencia, como puede
apreciarse en la figura 2.9


#igura 2.9 @erfil de diente circular


9
'arle NucOingham* !&!LL%+1!L 0'15!&+1S -# .'!/S
8
donde

( ) y D A B + =
2

<2.$:=


( )
2 2
tan
y D A
y D
dy
d
+
+
= =
<2.$9=

y

( ) [ ]

2
2
:
2 2
2
2
2
cos
$

=
+
=
A
y D A
A
dy
d

<2.$?=



2.) Soca'aci*n en el tallado de engranajes rectos


#igura 2.? +nterferencia

'n el proceso de tallado del engranaje por parte de la cremallera, puede suceder que la punta
del diente proceda a socavar o rebajar el flanco del diente del engranaje, proceso conocido como
penetracin.

1omo se puede observar en la figura 2.? el punto de tangencia de la lnea de accin y del
circulo base del engranaje est sePalado como el punto de interferencia ', siendo este punto el
valor m2imo para el adendo del diente de la cremallera. 1omo el diente de cremallera lo supera,
el contacto empieza en el punto ! y la cremallera produce un rebaje <marcado en la lnea de
D
puntos= conocido como socavacin. 'sta penetracin no es deseable, ya que debilita la base del
diente, justo donde las tensiones son mayores cuando el diente esta cargado.

'l valor mnimo del n(mero de dientes necesario para que no e2ista socavacin viene dado por
la ecuacinA

2
min
2
sen
Z =
<2.$B=

1omo puede verse en la figura 2.? una forma de evitar la socavacin del diente pasa por
recortar el acercamiento de la herramienta de corte <cremallera= una distancia 2 cuyo valor viene
dado por la e2presinA

min
$
Z
Z
=
<2.$C=



2.+ ,-todos de .a/ricaci*n

Los dientes de los engranajes se fabrican por los siguientes procedimientos de mecanizado o
generacin.


2.9.$ #resa

Los engranajes puede fabricarse a partir de un disco eliminando el material entre los dientes en
una fresadora que usa el (til de corte indicado en la figura 2.?.


#igura 2.? #resa cortadora circular

2.9.2 .eneracin por cremallera o maquina de 0aag.
$7

Los dientes de los engranajes pueden producirse tambi6n por otro m6todo conocido como
generacin. 1omo una cremallera puede considerarse como un engranaje de radio infinito, puede
construirse un (til de esta forma de acero endurecido con filos cortantes alrededor de los bordes
de los dientes. Se da al (til un movimiento alternativo paralelo al eje del engranaje. !l mismo
tiempo, el disco base del engranaje se hace girar lentamente y se da a la cremallera un
movimiento lateral igual a la velocidad de crculo primitivo del engranaje. 'l material contenido
entre los dientes del engranaje se elimina engendrndose dientes en involuta. Solamente ser
necesario un (til para tallar engranajes de cualquier n(mero de dientes en cada paso.

'n la foto de la figura 2.B se aprecia el detalle de una maquina 0!!. realizando el tallado del
engranaje, que se sit(a en el plano horizontal, mientras la cremallera procede en el plano vertical
al corte progresivo de los dientes.


#igura 2.B 0aquina de 0aag


2.9.: 0ecanizacin por fresa generatriz

'ste procedimiento consiste en la utilizacin de una fresa de lado recto como la que se indica
en la figura 2.C. 'ste (til puede considerarse como un cilindro alrededor del que se ha enrollado
en espiral un filete de la misma seccin transversal que el diente de la cremallera. La rosca
resultante est acanalada, los bordes desvanecidos y despu6s endurecidos y rectificados. 'l (til
se sit(a de forma que d6 la profundidad de corte adecuada y despu6s se hace girar.
1inemticamente, la accin de la fresa sobre el disco base es equivalente a la del cortador de
cremallera. 'l avance de la h6lice al girar simula el movimiento lateral de la cremallera. !
medida que progresa el tallado avanza el (til a2ialmente a lo largo del disco hasta que los dientes
cubren la totalidad de la anchura de la cara. Qste es el proceso por el que se fabrican la mayor
parte de los engranajes producidos en masa.
$$


#igura 2.C #resa generatriz


2.9.9 06todo de #elloRs.


#igura 2.8 1ortador #elloRs


's un proceso de generacin en el que se utiliza un (til que se asemeja a un engranaje
endurecido con bordes adecuadamente rebajados. 'l (til y el disco de metal en el que se ha de
tallar el engranaje se montan en ejes paralelos y se hacen girar lentamente* se da al (til un
$2
movimiento alternativo adicional sobre su eje. Se engendran los dientes sobre el disco como se
indica en la figura 2.8. !l comienzo, se hace avanzar el (til radialmente sobre el disco a una
distancia igual a la profundidad del diente. @ara tallar engranajes internos debe utilizarse el
m6todo de #elloRs. 'ste m6todo es tambi6n adecuado para ruedas dentadas con pestaPa en las
que escasea el espacio en un e2tremo de los dientes, como en los trenes de engranajes de las
transmisiones de los automviles. Las fresas #elloRs se utilizan tambi6n para tallar engranajes
de cualquier sistema.

Los dientes tallados por procedimiento continuo y conformado tienen usualmente un pequePo
adelgazamiento en los e2tremos. Los (tiles de corte se modifican de forma que el diente resulte
ligeramente ms estrecho en la porcin e2terior, ya que as los dientes entrantes absorben la
carga ms gradualmente y los errores de forma y separacin de los dientes tienen menor efecto
en la produccin de ruidos y vibraciones.


2.0 ,-todos de aca/ado

@ueden necesitarse para altas velocidades y cargas pesadas, una operacin de acabado, despu6s
del tallado, que d6 a la lnea e2terior del diente un grado suficiente de precisin y acabado
superficial. Se utilizan los m6todos siguientesA


2.?.$ /ascado mecnico de engranajes.

Se talla el engranaje con una fresadora fabricada especialmente de forma parecida a un
engranaje o cremallera. 'l diente de la fresa tiene una componente a2ial del movimiento sobre la
superficie del diente, cortando virutas filiformes. 'l rascado mecnico se hace antes del
templado y para realizar esta operacin es necesario que haya material suficiente. 'l rascado
mecnico es un m6todo de acabado que se utiliza mucho en la fabricacin de engranajes en
grandes cantidades.


2.?.2. /ectificado por medio de abrasivos

0ediante este procedimiento se trata al engranaje templado mediante una herramienta de
plstico con forma de engranaje helicoidal, impregnado con abrasivo, lo que har que las
correcciones de la forma de diente sean menores y se mejore la lisura de la superficie.


2.?.: Lapeado

Se trata al engranaje con una herramienta para lapear en forma de engranaje, en un medio que
tiene abrasivo. ! veces se tallan dos engranajes conjugados. Se necesita un movimiento relativo
adicional en la direccin del eje para el engranaje cilndrico de dientes rectos y para los dientes
helicoidales. >n lapeado e2cesivo puede ser perjudicial para la forma de la involuta.


2.?.9 @ulido
$:

Se debe utilizar el pulido para dar la forma final a los dientes despu6s del termotratamiento. Se
pueden corregir los errores de distorsin debidos al templado. 1uando se tallan, debe dejarse
suficiente material sobre la superficie del diente. !lgunos engranajes de dentadura fina se hacen
a partir de lingotes de acero fundido.


2.?.? NruPido

's un proceso de moldeacin plstica que resulta de la presin de rozamiento, la cual aplana y
e2tiende las pequePas irregularidades superficiales. Se utiliza una herramienta bruPidora
templada especialmente. 'ste proceso no corrige los errores debidos a un tamaPo errneo.



2.1 ,-todo de si"&laci*n



#igura 2.D Simulador para generar perfiles de dientes

La simulacin del proceso generador del engranaje permite su estudio y observacin con un
coste reducido sin necesidad de la fabricacin real del engranaje. 1omo se puede ver en la figura
2.D un mecanismo empleado para la simulacin consiste en una base circular en la que se le
puede instalar una plantilla de papel y un perfil de cremallera <varios modelos= que unidos
$9
mediante una barra los mantiene solidarios, el giro de la base circular con el desplazamiento
lateral de la cremallera. "e esta forma es posible dibujar en el papel la silueta de los dientes de
cremallera y a medida que se van desplazando en el papel va quedando dibujado el perfil del
diente de involuta en el engranaje.


15
CAPTULO 3. LA SIMULACION


Como modelo para la generacin de los dientes del engranaje se toma la generacin por corte
de una cremallera de dientes rectos o maquina de Maag, tal y como se describe en 2.4.2.

Como simplificacin del modelo se toman el perfil perpendicular del engranaje y el perfil
perpendicular de la cremallera cortante. Se supone que la cremallera se muee de forma
perpendicular al plano formado por la pantalla del ordenador.

!l modelo partir" del perfil de un cilindro, es decir un c#rculo, y el perfil de una cremallera con
dientes rectos. Mediante los despla$amientos reali$ados por el cortador %cremallera& sobre el
cilindro se an reali$ando cortes en su perfil, generando como resultado un engranaje recto
e'terno.


3.1. Herramientas

Se elige como lenguaje de desarrollo el C((, usando para la parte gr"fica las librer#as )pen*+.
Sin embargo, las librer#as )pen*+ al ser independientes del sistema operatio no incluyen el
manejo de las entanas que dependen de cada sistema operatio, por lo que para el dise,o de las
entanas se usa *+-.. /or ultimo, se necesitan cajas de te'to, botones y controles gr"ficos que
permitan la entrada de los par"metros de dise,o as# como la manipulacin de los procesos de
simulacin, por lo que opta por el uso de la *+-0 -ser 0nterface +ibrary, librer#a en C(( que
proee de los controles necesarios para un desarrollo gr"fico con )pen*+.


1.1.1. C((

!l C(( %pronunciado 2ce m"s m"s2 o 2ce plus plus2& es un lenguaje de programacin, dise,ado
a mediados de los a,os 1345, por 6jarne Stroustrup, como e'tensin del lenguaje de
programacin C.

Se puede decir que C(( es un lenguaje que abarca tres paradigmas de la programacin7 la
programacin estructurada, la programacin gen8rica y la programacin orientada a objetos.

9ctualmente e'iste un est"ndar, denominado 0S) C((, al que se :an ad:erido la mayor#a de
los fabricantes de compiladores m"s modernos. +as principales caracter#sticas del C(( son las
facilidades que proporciona para la programacin orientada a objetos y para el uso de plantillas o
programacin gen8rica %templates&.

C(( est" considerado por muc:os como el lenguaje m"s potente, debido a que permite trabajar
tanto a alto como a bajo niel, sin embargo es a su e$ uno de los que menos automatismo trae
%obliga a :acerlo casi todo manualmente al igual que C& lo que 2dificulta2 muc:o su aprendi$aje.

!l nombre C(( fue propuesto por ;ic< Masciatti en el a,o 1341, cuando el lenguaje fue
utili$ado por primera e$ fuera de un laboratorio cient#fico. 9ntes se :ab#a usado el nombre 2C
1=
con clases2. !n C((, 2C((2 significa 2incremento de C2 y se refiere a que C(( es una e'tensin
de C.


1.1.2. )pen*+

)pen*+ es una 9/0 para desarrollar aplicaciones gr"ficas 2> y 1>.

)pen*+ es el resultado de los esfuer$os de S*0 %Silicon *rap:ics 0nc.& para mejorar la
portabilidad de *+, que era la 9/0 de programacin para las estaciones gr"ficas 0;0S de alto
rendimiento de la compa,#a.

+a nuea 9/0 deb#a ofrecer la potencia de *+ y ser a la e$ mas abierto, permitiendo una m"s
f"cil adaptacin a otras plataformas :ard?are y sistemas operatios.

/ara conseguir esta independencia, )pen*+ no incluye ninguna funcin para la gestin de
entanas, interactiidad con el usuario ni manejo de fic:eros, ya que todas estas acciones son
altamente dependientes del sistema operatio.

.odas las mejoras de )pen*+ son decididas por la )pen*+ 9rc:itectural ;eie? 6oard
%9;6&, una plataforma independiente del que forman parte las mas importantes empresas de
fabricacin de :ard?are y soft?are gr"fico.

Sin entrar en demasiados detalles, describiremos algunas de las caracter#sticas que )pen*+
implementa7

/rimitias geom8tricas. /ermiten construir descripciones matem"ticas de objetos. +as
actuales primitias son7 puntos, l#neas, pol#gonos, im"genes y bitmaps.
Codificacin del Color en modos ;*69 %;ojo@Aerde@9$ul@9lfa& o de color inde'ado.
Aisuali$acin y Modelado que permite disponer objetos en una escena tridimensional,
moer nuestra c"mara por el espacio y seleccionar la posicin entajosa deseada para
isuali$ar la escena de composicin.
Mapeado de te'turas que ayuda a traer realismo a nuestros modelos por medio del
dibujo de superficies realistas en las caras de nuestros modelos poligonales.
+a iluminacin de materiales es una parte indispensable de cualquier gr"fico 1>.
)pen*+ proee de comandos para calcular el color de cualquier punto dadas las
propiedades del material y las fuentes de lu$ en la :abitacin.
!l doble buffering ayuda a eliminar el parpadeo de las animaciones. Cada fotograma
consecutio en una animacin se construye en un buffer separado de memoria y
mostrado solo cuando est" completo.
!l 9nti@ali$ado reduce los bordes escalonados en las l#neas dibujadas sobre una pantalla
de ordenador. +os bordes escalonados aparecen a menudo cuando las l#neas se dibujan
con baja resolucin. !l anti@ali$ado es una t8cnica comBn en gr"ficos de ordenador que
modifica el color y la intensidad de los pi'els cercanos a la l#nea para reducir el $ig@$ag
artificial.
!l sombreado *ouraud es una t8cnica usada para aplicar sombreados suaes a un
objeto 1> y producir una sutil diferencia de color por sus superficies.
1C
!l D@buffering mantiene registros de la coordenada D de un objeto 1>. !l D@buffer se
usa para registrar la pro'imidad de un objeto al obserador, y es tambi8n crucial para el
eliminado de superficies ocultas.
!fectos atmosf8ricos como la niebla, el :umo y las neblinas :acen que las im"genes
producidas por ordenador sean m"s realistas. Sin efectos atmosf8ricos las im"genes
aparecen a eces irrealmente n#tidas y bien definidas. Eiebla es un t8rmino que en
realidad describe un algoritmo que simula neblinas, brumas, :umo o polucin o
simplemente el efecto del aire, a,adiendo profundidad a nuestras im"genes.
!l 9lp:a blending usa el alor 9lfa %alor de material difuso& del cdigo ;*69, y
permite combinar el color del fragmento que se procesa con el del p#'el que ya est" en
el buffer. 0magina por ejemplo dibujar una entana transparente de color a$ul claro
enfrente de una caja roja. !l 9lp:a blending permite simular la transparencia de la
entana, de manera que la caja ista a tra8s del cristal apare$ca con un tono magenta.
+os planos de plantilla permiten restringir el tra$ado a ciertas regiones de la pantalla.
+as listas de >isplay permiten almacenar comandos de dibujo en una lista para un
tra$ado posterior, cuando las listas de display se usan apropiadamente puedan mejorar
muc:o el rendimiento de nuestras aplicaciones.
+os !aluadores /olinmicos siren para soportar 6@splines racionales no uniformes,
esto es para ayudar a dibujar curas suaes a tra8s de unos cuantos puntos de
referencia, a:orr"ndose la necesidad de acumular grandes cantidades de puntos
intermedios.
Caracter#sticas de Feedbac<, Seleccin y !leccin que ayudan a crear aplicaciones que
permiten al usuario seleccionar una regin de la pantalla o elegir un objeto dibujado en
la misma. !l modo de feedbac< permite al desarrollador obtener los resultados de los
c"lculos de tra$ado.
/rimitias de ;aster %bitmaps y rect"ngulos de pi'els&
)peraciones con /i'els
.ransformaciones7 rotacin, escalado, perspectias en 1>

9 grandes rasgos, )pen*+ es una especificacin, es decir, un documento que describe un
conjunto de funciones y su comportamiento e'acto. 9 partir de ella, los fabricantes de :ard?are
crean implementaciones %bibliotecas de funciones creadas para enla$ar con las funciones de la
especificacin )pen*+, utili$ando aceleracin :ard?are cuando sea posible&. >ic:os fabricantes
tienen que superar pruebas espec#ficas que les permitan calificar su implementacin como una
implementacin de )pen*+.

+a especificacin )pen*+ era reisada por el )pen*+ 9rc:itecture ;eie? 6oard %9;6&,
fundado en 1332. !l 9;6 estaba formado por un conjunto de empresas interesadas en la
creacin de una 9/0 consistente y ampliamente disponible. Microsoft, uno de los miembros
fundadores, abandon el proyecto en 2551.

!l 11 de julio de 255= se anunci que el control de )pen*+ pasar#a del 9;6 al *rupo
G:ronos. Con ello se intentaba mejorar el mar<eting de )pen*+ y eliminar las barreras entre el
desarrollo de )pen*+ y )pen*+ !S. 9;6 se conirti dentro de G:ronos en el )pen*+ 9;6
Hor<ing *roup. /ara una relacin de los miembros que componen el )pen*+ 9;6 Hor<ing
*roup, 8ase el apartado Miembros del *rupo G:ronos. !l gran nBmero de empresas con
ariados intereses que :an pasado tanto por el antiguo 9;6 como por el grupo actual :an :ec:o
de )pen*+ una 9/0 de propsito general con un amplio rango de posibilidades.
14

!n un programa que este reali$ando una simulacin, uno de los factores clae y sobre el que
corre la simulacin es el tiempo. Cada escena a presentar en la entana es diferente, por ello,
)pen*+ dibuja una escena y la uelca en la entana y empie$a a dibujar la escena siguiente
reali$ando esta operacin en un ciclo continuo :asta el final del programa.


1.1.1. *+-.

*+-. es una librer#a de ayuda de )pen*+, escrita por Mar< I. Gilgard %de S*0&, que proee
un marco cmodo, sencillo y multi@plataforma por la que podemos crear la entana en la que se
trabaja, iniciar )pen*+ y manejar algunas funciones b"sicas de 0J).

+a biblioteca *+-. es dependiente de la plataforma, y ofrece un paradigma comBn para el
sistema de entanas y dispositios perif8ricos. 9s# pues cuando una aplicacin )pen*+ quiere
abrir una entana para una animacin gr"fica usa el conjunto de comandos *+-. y 8ste toma el
control del sistema de entanas subyacente. >e algBn modo *+-. oculta al desarrollador los
detalles sucios de los sistemas de entanas espec#ficos %Hindo?s, K11, Motif, etc.& y le deja
concentrarse en la tarea principal, el cdigo )pen*+. )tra entaja de usar *+-. es que :ace
que el cdigo sea independiente de la plataforma.


1.1.4. *+-0

*+-0 es un librer#a escrita en C((, basada en *+-., que facilita un interfa$ de usuario
proporcionando controles como botones, cajas de seleccin, botones de seleccin, y desli$antes
para usar con )pen*+. !s un gestor de entana independiente, confiando a *+-. todas las
cuestiones dependientes del sistema operatio, como son la gestin del ratn y de la entana.

!ntre las caracter#sticas que *+-0 incluye est"n7

0ntegracin completa con *+-.
Creacin simple de una nuea entana de interfa$ de usuario con una l#nea sola de
cdigo.
Soporte a mBltiples entanas de interfa$ de usuario.
.iene controles est"ndar como7
o 6otones
o 6otones de seleccin para opciones mutuamente e'clusias
o Cajas de te'to para introducir el te'to, nBmeros enteros, y alor es de punto
flotante
o >esli$antes para manipular interactiamente nBmeros enteros yJo alores de
punto flotante.
o Campos de te'to est"ticos.
o /aneles para agrupar juegos de controles
o +#neas de separacin para ayudar isualmente a organi$ar los grupos de control
+os controles pueden generar retrollamadas %callbac<s& cuando sus alores cambian.
+as ariables puedes ser inculadas a controles y autom"ticamente actuali$adas cuando
se reali$an cambios en el control %LLariables iasLL&
13
+os controles autom"ticamente pueden ser sincroni$ados para reflejar cambios de
ariables ias
+os controles puede proocar acontecimientos cuando cambian los alores de *+-.
+a posicin y el tama,o de los controles son autom"ticos
+os controles pueden ser agrupados por columnas
!l usuario puede recorrer los controles mediante la tecla M.abN


3.2. Diseo

Se procede en primer lugar a dise,ar el proceso que partiendo de los dos perfiles llee a
obtener el perfil del engranaje buscado. -na e$ dise,ado el proceso, el resto de las opciones de
dise,o consiste en el dise,o del perfil del diente de la cremallera. 9unque se parte inicialmente
de un diente recto, se proceder" a generar otro tipo de perfiles del diente, como son los
recomendados por la norma 0S) =11=. Se plantear" el dise,o de un engranaje partiendo de un
diente asim8trico, donde los "ngulos de presin no son los mismos en cada cara del diente. /or
ultimo, tambi8n y tambi8n se generar" un perfil de un diente de cremallera en el que su lateral no
es una recta sino un arco de circunferencia.


1.2.1. +a simulacin

)pen*+ crea un escenario sobre un sistema cartesiano de coordenadas segBn 1 ejes, dos de los
cuales se corresponden con el plano de la pantalla. >ado que nuestra simulacin se reali$a en el
plano, fijamos los alores del eje D en )pen*+ y se sitBa el centro de coordenadas en el centro
del engranaje. +a cremallera es colocada inicialmente a una distancia segBn el eje OP. Cuando
comien$a la simulacin, la cremallera se a despla$ando a lo largo del eje OP en sentido :acia el
origen del sistema :asta que muerde el c#rculo del engranaje. !ste moimiento ertical se :a
diidido en 15 pasos. !n una segunda fase, una e$ terminado el moimiento ertical de la
cremallera se procede a girar el engranaje un "ngulo dado y la cremallera se despla$a
:ori$ontalmente el alor de r
p
por el seno del "ngulo. !ste proceso se repite :asta que el diente
de cremallera situado a la i$quierda llega :asta el eje P entonces se inicia el proceso de retirada
de la cremallera, descendiendo las posiciones que :ab#a subido, retrocediendo y oliendo a
subir, repitiendo este ciclo :asta :aber girado 1=5Q el engranaje.

Cmo rear e! e"eto #e s$strain #e materia! en e! en%rana&e' +a solucin elegida para
esta cuestin :a sido a,adir, como pegatinas superpuestas, al cilindro cremalleras id8nticas a la
isible pero del mismo color que el fondo de la escena, generando el efecto ptico de
eliminacin de material del cilindro. Como se puede er en la figura 1.1, donde las cremalleras
a,adidas ar#an su color desde el negro :asta el blanco del fondo colocadas sobre el cilindro.

)pen*+ crea un escenario en el que se le dice que figuras crear y donde colocarlas, y una e$
:ec:o este proceso en un buffer de la memoria, procede a olcarlos en el controlador grafico
para ser isuali$ados en la pantalla. !ste proceso es un bucle continuo :asta que se termina el
programa.


25

0magen 1.1 *eneracin del diente de engranaje


Cada una de las pie$as que forman parte de la escena tiene su propio sistema de referencia
cartesiano y es colocado en la escena mediante traslaciones y rotaciones de su sistema de
referencia con respecto al sistema de referencia de la escena.

!l circulo tiene su sistema de referencia situado en su centro, mientras que el centro del
sistema de referencia de la cremallera se sitBa en el centro de la base del diente, como podemos
obserar tanto en la figura 1.2 como en la figura 1.1.

Euestro simulador parte de una primera escena donde el circulo se sitBa en el centro de
coordenadas del sistema, mientras que al sistema de referencia de la cremallera se le aplica un
despla$amiento negatio segBn el eje P.

21
!n los siguientes cambios de escenario de la simulacin, la traslacin aplicada al sistema de la
cremallera es menor, con lo que se consigue simular un acercamiento de la :erramienta de corte
al cilindro del engranaje.

-na e$ que la traslacin aplicada a la cremallera es igual a la suma del radio de cabe$a mas la
altura del diente, :asta que esa distancia es igual al radio de cabe$a, la cremallera es dibujada
encima del circulo del engranaje produciendo el efecto de que est" cortando el cilindro.

!l siguiente paso es simular el giro del engranaje un "ngulo , correspondiente al "ngulo girado
por tallada. /ara ello se dibuja el c#rculo, que no cambia en toda la secuencia de simulacin. +o
siguiente es colocar una cremallera del mismo color que el fondo de la escena, situando el centro
de su sistema de coordenadas en R ( ) sen r
c
, ( ) cos
c
r S y girado con respecto al eje D un
"ngulo T. /or ultimo se dibuja la cremallera isible, situando su centro de coordenadas en
( ) [ ] 5 , sen r
c
y sin girar respecto al eje D.

+a siguiente escena, correspondiente al giro 2 iene construida como el c#rculo mas dos
cremalleras con el color de fondo de la escena despla$ando su centro de coordenadas a las
coordenadas del sistema7

( ) ( ) [ ] 2 cos , 2
c c
r sen r con "ngulo 2T segBn D

( ) ( ) [ ] cos ,
c c
r sen r con "ngulo T segBn D

y luego la cremallera isible situada en

( ) [ ] 5 , 2 sen r
c
con "ngulo 5Q segBn D

Sucesiamente, cada e$ que se incrementa el "ngulo T se necesita dibujar una cremallera del
mismo color de fondo mas, de forma que si TU1Q, en la ultima escena se tiene en el escenario7 un
circulo, 1=5 cremalleras del mismo color que el fondo y una cremallera isible.

Como se puede comprobar, a medida que la simulacin aan$a la complejidad de los c"lculos
necesarios para renderi$ar la escena aumenta y eso :ace que a efectos del usuario, la simulacin
empie$a r"pida, perdiendo elocidad a medida que transcurre el proceso de generacin del
engranaje recto. /or esta ra$n se a,ade un tempori$ador que incremente los tiempos de
renderi$ado en los ciclos iniciales de la simulacin aunque el resultado grafico depender"
totalmente de la potencia del ordenador donde corra el programa.

!n nuestro simulador, la cremallera de corte, esta formada por cinco dientes, por lo que se :ace
necesario oler a recolocarla en su posicin inicial o en nuestro caso, se opta por recolocarla en
una posicin O p de su posicin de origen, lo que permite un mayor aproec:amiento de su
recorrido :ori$ontal. Cuando esto sucede, y dado que las cremalleras usadas para generar la
mordida %mismo color de fondo& deben ser e'actamente la misma que la cremallera isible, el
proceso descrito mas arriba con los primeros pasos no se puede e'tender a la totalidad del giro de
la circunferencia ya que las cremalleras no isibles se terminar#an posicionando fuera del "rea
del circulo.
22
/ara solucionar este problema, se :a optado por crear en el simulador un ector que aya
guardando de forma secuencial el despla$amiento :ori$ontal de la cremallera isible con
respecto a su sistema de referencia inicial.


0magen 1.2 >etalle de posicin de la cremallera oculta


Como se puede obserar en la figura 1.2 en algBn momento de la simulacin la :erramienta de
corte %cremallera a$ul& se sitBa a una distancia Od del eje P del sistema. !ste alor es guardado
en el ector en la posicin correspondiente al "ngulo n siendo n el nBmero de eces que :a
girado el engranaje.

/ara dibujar la cremallera oculta correspondiente, supongamos la correspondiente a la posicin
m, siendo n m< , entonces se comprueba cual es el alor correspondiente d guardado en el ector
21
y las coordenadas de traslacin de la cremallera en el sistema de referencia del escenario de la
simulacin ienen dadas por

R ( ) ( ) ( ) ( ) + + m sen d m r m d m sen r
c
cos , cos S

siendo su rotacin igual a m en el sentido de giro de D.


9 fin de facilitar la obseracin del proceso en todos los detalles, la simulacin del mecani$ado
se reali$a con control total del usuario, pudiendo parar el proceso, moerlo manualmente o
incluso retroceder, configurar par"metros de fabricacin, espec#ficos de las magnitudes del
engranaje como del "ngulo que gira el cilindro despu8s de cada mordida de la cremallera, :acer
isibles o no, par"metros de dise,o como el circulo base o de paso.

!l proceso es independiente del perfil de cremallera usado, por lo que para la simulacin se
:an creado dos fic:eros con el cdigo fuente separado. !l primero de los fic:eros main.cpp
contiene el cdigo de funcionamiento del simulador, la creacin de las entanas, tanto de
simulacin como de controles de datos y par"metros, pero b"sicamente contiene el motor de la
simulacin.

!n el segundo de los fic:eros del cdigo fuente, mecanismos.cpp contiene el dise,o y
construccin de cada uno de los elementos por separado. .anto el c#rculo como la cremallera,
permitiendo de esta forma el desarrollo de dientes de cremallera diferentes sin necesidad de
retocar practicante nada del dise,o del motor de simulacin.



1.2.2. Coeficiente de despla$amiento

Se :abla de despla$amiento de la :erramienta a la distancia entre el plano primitio de la
cremallera y la circunferencia de paso del engranaje. !l despla$amiento se e'presa como un
nBmero de eces el mdulo, y a ese nBmero se le conoce como coeficiente de despla$amiento,
que se entender" positio cuando la :erramienta se aleja de la rueda. -n despla$amiento positio
da lugar a un diente m"s anc:o en la base y por tanto m"s robusto.

Se incorpora a la simulacin la posibilidad de despla$ar la posicin de la cremallera de corte
posicion"ndola segBn el alor del coeficiente de despla$amiento.


1.2.1. /erfil del diente de cremallera est"ndar

/ara la construccin del diente se precisa indicar cuales son sus cuatro 8rtices y )pen*+ se
encarga de construir el pol#gono correspondiente. +a altura del diente, h, y el paso, p, ienen
dados por las ecuaciones %2.5& y %2.2& .

24

0magen 1.1 >iente de cremallera est"ndar

+os cuatro 8rtices que construyen el diente ienen dados por las coordenadas siguientes7

[ ]
(

= 5 , tan V
2 4
1
h p
%1.1&

[ ]
(

+ = h
h p
, tan V
2 4
2 %1.2&

[ ]
(

= h
h p
, tan V
2 4
1 %1.1&

[ ]
(

+ = 5 , tan V
2 4
4
h p
%1.4&



+a secuencia para la construccin del diente ser" indicar a )pen*+ que proceda a al
construccin de un pol#gono cerrado con 8rtices 1, 2, 3 y (. 9dem"s como la cremallera esta
compuesta por cinco dientes, se procede a la construccin de dos dientes mas a la i$quierda del
dise,ado y despla$ados una distancia p y 2Wp y lo mismo por el lado derec:o. /ara ello se
incrementan las coordenadas ' de cada 8rtice en el alor del despla$amiento, que coincide
eidentemente con el paso p.


1.2.4. /erfil del diente segBn 0S) =11=

+a norma 0S) =11= proee un m8todo de dise,o de engranajes cil#ndricos con un perfil de
enolente en base a resistencia frente a los dos modos de fallos m"s probables7 fallo por fle'in
en la base del diente y fallo por contacto superficial en el flanco del diente.

9 la :ora de dise,ar una transmisin por engranajes en base a resistencia se tienen tres tipos de
par"metros de dise,o7
o par"metros relacionados con la geometr#a
o cargas a las que esta sometida la transmisin
25
o coeficientes de seguridad m#nimos frente a cada posible fallo.

!n cuanto a la geometr#a, la recomendacin en la construccin del diente a en dos
direcciones, por un lado partiendo del perfil de un diente est"ndar, se procede a redondear
circularmente el perfil del diente en su cabe$a y por otra parte, el perfil lateral del diente se
rebaja %undercut& a fin de dejar una capa e'tra de material en el engranaje generado que luego es
eliminado por los procesos de mecani$ado posteriores.

!n primer lugar se determinan cuales son las coordenadas correspondientes al centro de la
circunferencia, E, del redondeo de la cabe$a del diente. /ara ello, podemos obserar en la figura
1.4 en detalle, la superposicin de un diente est"ndar y la cura de redondeo de cabe$a que es
tangente a las dos rectas que forman el perfil del diente.


Figura 1.4 >etalle de la cabe$a del diente


Coor#ena#as #e! entro #e ir$n"erenia)
+a coordenada ertical de E
y
iene dada por la coordenada ertical del punto 2 del perfil
est"ndar dado en la ecuacin %2.2& menos el radio de curatura,
fP
.

fP y
h E =

>el triangulo rect"ngulo formado por a, c y el radio de la circunferencia tenemos que7

cos =
fP
a
sen c
fP
=

2=
/ero del lado inferior del cuadrado se erifica que el radio de la circunferencia es igual a la
suma de a mas b, con lo que se obtiene el alor de b en funcin del "ngulo de presin y del radio
de curatura.

& cos 1 %
cos

=
=
=
fP
fP fP
fP
a b



>el lado i$quierdo del cuadrado, tenemos que el radio de curatura,
fP
, es igual a la suma de c
mas d, de donde se obtiene el alor de d.

& 1 %

sen
sen
c d
fP
fP fP
fP
=
=
=


>el triangulo rect"ngulo formado por d, e y la recta formada por el perfil del diente est"ndar se
tiene que7

( )
( )
|
|

\
|
=
=
=

cos
1
1
sen sen
tg sen
tg d e
fP
fP


>e la parte superior de la figura 1.4 se tiene que el radio de curatura es igual a la suma de b, e
y f, por lo que se puede obtener el alor de f7

( )
( )
( ) ( )
|
|

\
|
=
|
|

\
|
=
|
|

\
|
=
=

cos
1
cos
cos cos cos
cos
1
cos 1
2 2
sen
sen sen
sen sen
r b f
fP
fP
fP fP fP
fP


9:ora, se puede obtener la coordenada :ori$ontal del centro de curatura E
x
ya que se erifica
que7

f E
x x
+ = 2

y sustituyendo, de la ecuacin %1.2& que da la ordenada para el 8rtice 2, se tiene que

2C
|
|

\
|
+ + =


cos
1
an t
2 4
sen h p
E
fP x
%1.5&

de esta forma tenemos que las coordenadas del centro de curatura * ienen dadas por la
ecuacin %1.=&

[ ]
(

|
|

\
|
+ + =
fP fP
h
sen h p
E

,
cos
1
an t
2 4
%1.=&

>e forma similar se obtendr#an las coordenadas del centro de curatura para el lado sim8trico
derec:o del diente.

[ ]
(

|
|

\
|
=
fP fP
h
sen h p
E

,
cos
1
an t
2 4
L %1.C&

!n lo que sigue se reali$a el estudio en detalle para el lado i$quierdo del diente, ya que los
puntos del lado derec:o del diente se pueden obtener de forma similar.

Se pueden e'presar las coordenadas del punto de tangencia + en funcin de las coordenadas del
centro de curatura como

[ ] [ ] sen E E
fP y fP x
+ = , cos 5
%1.4&


Proeso #e onstr$in #e! #iente sin $n#er$t)
Si el diente no tiene rebaje lateral, entonces el proceso para su creacin es construir un
pol#gono mediante la instruccin ,L-POL.,ON siendo la secuencia de construccin la
siguiente7
1. A8rtice 1 dado por la ecuacin %1.1&
2. /unto + dado por la ecuacin %1.4&
1. 9rco de cabe$a del diente. >ado que no e'iste un comando en )pen*+ que construya
un arco de circunferencia, se procede a reali$arlo, dando una serie de puntos dados por
las coordenadas R/S generadas ariando el "ngulo X
[ ] [ ] sen E E P
fP y fP x
+ = , cos
donde
2


%1.3&
4. 9rco de la cabe$a del diente del lado derec:o del diente. +os puntos que forman el arco
ienen dados por las coordenadas
[ ] [ ] sen E E P
fP y fP
+ + = L , cos L L
donde ( )


2

%1.15&
5. !l arco termina en el sim8trico +/
=. A8rtice (, cerrando el pol#gono.

24

Figura 1.5 >iente de cremallera con redondeo en cabe$a


*! 0a!or m12imo a#misi3!e 4ara e! ra#io #e re#on#eo es aquel que sitBa el centro * en el
eje de simetr#a del diente, es decir 5 =
x
E , con lo que de la ecuacin %1.5& se tiene que

( )

sen
sen h p
sen
h p
fP


=


=
1 4
2 cos
cos
1
tan
2 4 ma'
%1.11&


Si el diente tiene adem"s un rebaje lateral, pueden darse arios perfiles diferentes en funcin
del alor de S
pr
, como podemos apreciar en la figura 1.=.
!l 8rtice + se corresponde con el punto de tangencia del perfil sin undercut %l#nea 1@+ en color
gris& con la l#nea de circunferencia del redondeo de cabe$a.
9 medida que aumenta el alor de S
pr
el punto de corte del perfil se a situando en un punto de
la circunferencia despla$"ndose desde + :acia 5. 9 partir de ese punto el perfil, si el alor del
rebaje aumenta, entonces el perfil del diente es paralelo al eje de simetr#a del diente %l#nea 5O6&,
l#nea de color erde.
Se procede, por tanto, a determinar las coordenadas del punto 5 y el alor de S
pr

correspondiente para dic:o 8rtice. +uego se determina el punto de corte 6, as# como el alor
m"'imo admisible para S
pr
.


23

Figura 1.= >etalle del perfil del diente

Se tiene que

fP x x
E = =

y sustituyendo de la ecuacin %1.5&

|
|

\
|
+ + =

|
|

\
|
+ + =


cos
cos 1
tan
2 4
cos
1
an t
2 4
=
sen h p
sen h p
fP
fP fP x


y la componente ertical iene dada por

fP
y
h
E
=
= =


con lo que

[ ]
(

|
|

\
|
+ + =
fP fP
h
sen h p


,
cos
cos 1
tan
2 4
= %1.12&

>e igual manera se obtiene su sim8trico

[ ]
(

|
|

\
|
=
fP fP
h
sen h p


,
cos
cos 1
tan
2 4
L = %1.11&
15

-na e$ obtenidas las coordenadas del punto 5, se procede a calcular las correspondientes al
punto A. Si en la figura 1.4 se obsera el triangulo rect"ngulo formado por 5O7, 7@A y A@5 se
comprueba que

y
x x
A
=
=
tan

=

con lo que despejando A
x


( )
|
|

\
|
+ =

|
|

\
|
+ + =
=

cos
cos 1
tan
2 4
tan
cos
cos 1
tan
2 4
tan = =
fP
fP fP
y x x
h p
h
sen h p
A

%1.14&

9:ora bien, lo que nos interesa es conocer el alor de S
pr
que :ace que el punto de corte sea el
5, con lo que

( ) cos 1
=
=
x x pr
A S

Sustituyendo por los alores obtenidos en las ecuaciones %1.14& y %1.1& se tiene que

( ) cos 1
=
=
fP pr
S %1.15&

YCu"l es el punto de corte, en coordenadas cartesianas, de las rectas inclinadas del perfil del
diente con la circunferencia de redondeo de cabe$a para alores de S
pr
menores que
=
pr
S Z +a
respuesta iene dada planteando las ecuaciones de la recta y de la circunferencia y resoliendo el
sistema. Sin embargo, amos a reali$ar una simplificacin en la resolucin de este problema7 Se
supone que el punto de corte es funcin de un "ngulo [, siendo 5 , siendo tal "ngulo un
funcin lineal de S
pr
donde los alores de frontera ienen dados por los puntos R5S y R=S

n m + = 5 en R5S
n m
fP
+ = & cos 1 % 5
en R=S

;esoliendo el sistema se tiene que

( )
pr
fP
S

=


cos 1

%1.1=&

!l punto / de corte de la recta del perfil del diente con el c#rculo de cabe$a endr" dado por las
coordenadas %1.1C&

11
[ ] [ ] sen E E P
fP y fP x
+ = , cos
%1.1C&

y el correspondiente sim8trico

[ ] [ ] sen E E P
fP y fP x
+ + = L , cos L L
%1.14&

!n el supuesto de que S
pr
tenga un alor superior a
=
pr
S
se :ace necesario determinar las
coordenadas cartesianas del punto 8.

cos
tan
2 4
cos
1 4
pr
pr
x x
S
h p
S
+ =
+ =


con lo que tenemos que las coordenadas son

[ ]
(

+ = 5 ,
cos
tan
2 4
4

pr
S
h p
%1.13&

y las correspondientes a su punto sim8trico

[ ]
(

+ = 5 ,
cos
tan
2 4
L 4

pr
S
h p
%1.25&


-na e$ determinada las coordenadas del punto 8, se procede al c"lculo de las
correspondientes al punto 6. /ara ello, se parte de que el triangulo formado por los 8rtices 6, 7
y 8 de la figura 1.4, forman un triangulo rect"ngulo con lo que

y
x x
C
4 C
tan

=

y por otro lado

|
|

\
|
+ + =
=



cos
cos 1
tan
2 4
= C
sen h p
fP
x x


con lo que de ambas ecuaciones podemos encontrar el alor de 7
y


12

sen
S
sen
h
sen
S
h p sen h p
fP
fP
pr
fP
x x
y

|
|

\
|
+ =

(
(

|
|

\
|
+
|
|

\
|
+ + =
=

=
cos
cos 1
cos
cos
tan
2 4 cos
cos 1
tan
2 4
tan
4 C
C


9:ora ya podemos e'presar la coordenadas del punto 6 como

[ ]
(
(
(
(
(

|
|

\
|
+
|
|

\
|
+ +
=



sen
S
sen
h
sen h p
fP
fP
fP
cos
cos 1
,
cos
cos 1
tan
2 4
C
%1.21&

as# como los de su punto sim8trico

[ ]
(
(
(
(
(

|
|

\
|
+
|
|

\
|

=



sen
S
sen
h
sen h p
fP
fP
fP
cos
cos 1
,
cos
cos 1
tan
2 4
L C
%1.22&


C$1! es 0a!or m12imo a#misi3!e 4ara e! reorte #e! 4er"i! #e! #iente' !sa situacin se
produce cuando el 8rtice 8 llega a situarse en el punto 7, como se puede er en la figura 1.1, o
dic:o de otra forma cuando

x x
= 4 =

Sustituyendo las ecuaciones %1.15& y 1.15& y despejando se obtiene el alor m"'imo admisible
para el rebaje lateral del diente S
pr


& cos 1 %
ma'
+ = sen sen h S
fP pr
%1.21&

!n el proceso de construccin de este diente nos encontramos que la sentencia
,L-POL.,ON de )pen*+ solo puede utili$arse para generar pol#gonos cone'os simples. !l
perfil de diente recomendado por 0S) =11= y cuyo rebaje lateral del diente sea superior al alor
dado por
=
pr
S
en la ecuacin %1.15& deja de ser cone'o como se puede comprobar en la figura
1.=, color erde, ya que el punto 6 queda en el interior de la l#nea formada por 8@5.

/ara solucionar este problema, la construccin del diente de cremallera se reali$ar" como unin
de dos pol#gonos cone'os, uno formado por el tronco base del diente y otro por la cabe$a
redondeada del mismo.
11
+a secuencia de construccin del pol#gono base, si
=
pr pr
S S es7
1. A8rtice 8 dado por la ecuacin %1.13&
2. A8rtice 6 dado por la ecuacin %1.21&
1. A8rtice 6/ dado por la ecuacin %1.22&
4. A8rtice 8/ dado por la ecuacin %1.25&

!n caso de que
=
pr pr
S S entonces la secuencia de construccin es7
1. A8rtice 8 dado por la ecuacin %1.13&
2. /unto P dado por la ecuacin %1.1C&
1. /unto P/ dado por %1.14&
4. A8rtice 8/ dado por %1.25&

!l pol#gono de cabe$a ser" construido en el caso de que
=
pr pr
S S
1. A8rtice 6, ecuacin %1.21&
2. A8rtice 5, ecuacin %1.12&.
1. 9rco de cabe$a del diente. Se dan los puntos que forman parte del arco de
circunferencia, determinados por las coordenadas P generadas ariando el "ngulo X
[ ] [ ] sen E E P
fP y fP x
+ = , cos
donde
2
5


%1.24&
4. 9rco de la cabe$a del diente del lado derec:o del diente. +os puntos que forman el arco
ienen dados por las coordenadas
[ ] [ ] sen E E P
fP y fP
+ + = L , cos L L
donde


2

%1.25&
5. A8rtice 5/, ecuacin %1.11&
=. A8rtice 6/, ecuacin %1.22&

en caso contrario la secuencia es la siguiente7
1. /unto P dado por la ecuacin %1.1C&
2. 9rco de cabe$a del diente. Se dan los puntos que forman parte del arco de
circunferencia, determinados por las coordenadas P generadas ariando el "ngulo ,
empe$ando en el "ngulo correspondiente al punto de corte sobre el redondeo de
cabe$a.
[ ] [ ] sen E E P
fP y fP x
+ = , cos
donde
2


%1.2=&
1. 9rco de la cabe$a del diente del lado derec:o del diente.
[ ] [ ] sen E E P
fP y fP
+ + = L , cos L L
donde ( )


2

%1.2C&
4. /unto P/, ecuacin %1.14&.

14

Figura 1.C >iente de cremallera con redondeo y rebaje lateral


1.2.5. /erfil de diente asim8trico

+a diferencia con el diente est"ndar iene dado por que en lugar de e'istir un Bnico "ngulo de
presin en los dos lados del diente, se tiene "ngulos de presin diferentes en cada cara del diente.
!l tipo de engranaje generado es utili$ado en la industria de :elicpteros, donde se busca que los
momentos generados en un sentido de giro sean mayores que en el sentido contrario.
/ara construir este tipo de diente se parte de un engranaje est"ndar pero mientras que en el lado
i$quierdo del perfil del diente usamos el "ngulo de presin, para la construccin del lado
derec:o del perfil del diente se usa el segundo "ngulo de presin .

[ ]
(

= 5 , tan V
2 4
1
h p
%1.24&

[ ]
(

+ = h
h p
, tan V
2 4
2 %1.23&

[ ]
(

= h
h p
, tan V
2 4
1 %1.15&

[ ]
(

+ = 5 , tan V
2 4
4
h p
%1.11&



/uede erse en la figura 1.4 un perfil del diente de cremallera donde el "ngulo de presin en el
lado i$quierdo del diente Q 14 = , y en el lado derec:o del diente Q 25 = .

15

Figura 1.4 >iente de cremallera est"ndar asim8trico

Si al diente de perfil asim8trico se le aplican las recomendaciones 0S) =11=, para su
construccin se reali$an todos los c"lculos de dise,o al igual que si no fuera asim8trico, pero
teniendo en cuenta que los puntos del lado derec:o del diente no son sim8tricos del lado
i$quierdo, y necesitan ser calculados usando el "ngulo de presin .


Figura 1.3 >iente de cremallera asim8trico con recomendaciones 0S)



1.2.=. >iente con perfil circular

9,adimos a nuestro simulador la opcin de crear un diente con un perfil circular, creando un
sector circular del que forman parte los 8rtices 1 y 2 del diente est"ndar %er figura 1.1& y otro
punto caracteri$ado por la flec:a de deformacin circular, f, que definimos como la distancia
e'istente entre el perfil est"ndar y el arco de circunferencia en la perpendicular a la recta del
diente est"ndar en su punto medio como se puede obserar en la figura 1.15.

1=

Figura 1.15 >iente de cremallera asim8trico con recomendaciones 0S)


9a#io #e !a ir$n"erenia)
Si llamamos l a la cuerda del arco, y que en nuestro caso es concordante con la recta lateral del
perfil est"ndar, y a es el radio, se tiene que estos par"metros est"n relacionados por la ecuacin
del arco de circunferencia7

2
2 2 f a f l =

>espejando a de la ecuacin se tiene el radio de la circunferencia

2 4
2
f
f
l
a +

= %1.12&





Como se puede obserar en el detalle del triangulo formado
por la recta lateral del perfil est"ndar, se tiene que
cos
h
l = y
sustituyendo en la ecuacin %1.12& se tiene la e'presin del
radio de la circunferencia buscado en funcin de lo
par"metros de dise,o del diente.

2 cos 4
2
2
f
f
h
a +

=

%1.11&

1C

Coor#ena#as #e! entro #e !a ir$n"erenia7
+as coordenadas del punto del perfil donde se aplica la flec:a son
(

2
,
4
h p
. .omando
estas coordenadas como punto de partida podemos obtener las coordenadas del centro de la
circunferencia se tiene que

( ) cos
4
+ = f a
p
E
x

( ) sen f a
h
E
y
=
2


ya que la recta que une el centro de la circunferencia con el punto tomado de referencia es
perpendicular a la recta del diente est"ndar y por lo tanto el "ngulo toma el alor de .

Se procede a sustituir los alores de a determinados por la ecuacin %1.11& y despu8s de operar
quedan determinadas las coordenadas del centro de la circunferencia como

cos
2 cos 4 4
2


+ =
f
f
h p
E
x

sen
f
f
sen h h
E
y
+

=
2 cos 4 2
2
2



P$ntos :$e "orman !a $r0a #e! #iente)

-na e$ que se tienen las coordenadas del centro, se determinan los "ngulos [
1
y [
2
que el
radio de la circunferencia forma con la :ori$ontal para los 8rtices 1 y 2 e'tremos del perfil
circular.

|

\
|
+

=
|
|

\
|
=

sen
a
f
sen
a
h
arcsen
a
E
arcsen
y y
2
1
1


|

\
|
+

=
|
|

\
|
=

sen
a
f
sen
a
h
arcsen
a
E
arcsen
y y
2
1
2
2


14
-na e$ determinados estos dos "ngulos, las coordenadas de los puntos P de la cura ienen
determinados por la ecuacin

[ ] [ ] sen a E a E P
y x
+ = , cos
cuando
2 1

%1.14&


Constr$in #e! 4er"i! #e! #iente)

+a construccin del perfil en el simulador se :ace construyendo un pol#gono formado por los
puntos / generados por la ecuacin %1.14& cuando \ es recorrido desde
1
%8rtice 1& :asta
2

%8rtice 2&. +uego se reali$a la misma operacin desde el "ngulo ]@
2
%8rtice 2/& :asta el "ngulo
@
1
%8rtice 1/&.


Figura 1.11 >iente est"ndar con deformacin circular


*$ain %enera!)

Con los datos y coordenadas de nuestro sistema, procedemos a plantear las ecuaciones
generales del perfil del diente dadas en 2.2.1 y referidas a la figura 2.4.

/ara ello, se tiene en cuenta que a partir de las coordenadas erticales del punto medio del
diente y del centro de la circunferencia podemos obtener el alor de >

( )

sen f a h
sen f a
h h
d D
+ =
(

=
=
& %
2 2


!l "ngulo \ de la figura 1.15 es el que se corresponde con el "ngulo en el que el radio apunta al
sistema de coordenadas de la figura 2.5, y su alor lo podemos determinar como
13

|

\
|
+ =
|

\
|
=

sen
a
f
sen
a
h
arcsen
a
d
arcsen


9:ora se puede e'presar 6 como funcin de \

(

\
|
+ =
=

sen
a
f
sen
a
h
arcsen a
a b
cos
cos



/rocediendo a su sustitucin en la ecuacin %2.11& tenemos que

( ) ( )
2 2
cos y sen f a h a sen
a
f
sen
a
h
arcsen a x + +
|
|

\
|
|

\
|
+ =


40

CAPTULO 4. EL PROGRAMA SIMULADOR


En este captulo se describe el uso del programa, empezando por los paneles de control y se
exploran algunas posibilidades de uso del simulador.



4.1. La Mascara Inicial

La mascara inicial del programa permite seleccionar el tipo de simulacin a realizar. Una
simulacin normalizaa solo genera engranajes rectos normalizados, la modificacin de uno de
sus parmetros de dise!o implica el recalculo automtico del resto.

La simulacin !"#!rim!n$al permite jugar con los parmetros utilizados en el dise!o de
engranajes sin "acer ning#n reajuste automtico. El propsito de esta opcin es ser$ir de
"erramienta a los estudiantes de ingeniera mecnica para %ue "agan sus clculos de los
parmetros de dise!o y obtengan grficamente el resultado.

&dems en la simulacin experimental se juega con $ariaciones en el perfil del diente estndar,
incluyendo las recomendaciones '() *++*, el dise!o de dientes asim,tricos o con una
deformacin circular.



-igura 4.. /ascara inicial



4.
4.%. Con$rol!s comun!s a $oas las o#cion!s

Los siguientes controles son comunes a ambas opciones por lo %ue se inicia su descripcin en
primer lugar.


4.0... (eleccin del color


-igura 4.0 1anel del color


Es posible modificar los colores originales de de cada uno de los elementos %ue componen la
$entana grfica, para ello se selecciona el elemento deseado2 el fondo de $entana, el engranaje, la
cremallera, la circunferencia de fondo o la circunferencia de paso y se indica su color mediante
la composicin de sus colores bsicos rojo, $erde y azul indicando el porcentaje a . de cada uno
de ellos.


4.0.0. )pciones


-igura 4.+ 1anel de opciones


4.2.2.1 Angulo girado por tallada

'ndica el n#mero de grados %ue girar el disco del engranaje cada $ez %ue se produzca un
mo$imiento lateral de la cremallera. 3ue su $alor sea ., implica %ue para realizar el tallado del
engranaje son necesarios +*0 cortes de la cremallera.
40

4.2.2.2 Botn Reiniciar

&l pulsar este botn, la simulacin $uel$e a su origen y los parmetros de dise!o son
reinicializados. (ir$e para iniciar otra simulacin nue$a.


4.2.2.3 Botn Automtico / Manual

Este botn sir$e para %ue el proceso se realice de forma automtica o manual indicando el
mo$imiento paso a paso. &l pulsar en &utomtico el proceso de simulacin funciona de forma
automtica, tallando la cremallera el engranaje con los parmetros sugeridos. & su $ez el botn
se modifica a 4/anual4 y al ser presionado el proceso se detiene de forma %ue manualmente se
puede realizar el siguiente paso en el mo$imiento de la cremallera.


4.2.2.4 Botn "Siguiente >>"

(i el proceso se esta realizando de forma manual, ,ste botn se emplea para pro$ocar %ue la
cremallera de el siguiente paso en la $entana grfica en el tallado del engranaje.


4.2.2.5 Botn " Anterior"

(i el proceso se realiza de forma manual, al ser pulsado se realiza un mo$imiento "acia atrs en
el tiempo del proceso de simulacin del tallado.

5on las combinaciones de 66 y 77 es posible obser$ar detalles del tallado de los dientes del
engranaje.


4.2.2.! "ircun#erencia de pa$o

(e indica si se %uiere %ue la circunferencia de paso sea $isible o no en la $entana grfica.


4.2.2.% "ircun#erencia de #ondo

(e indica si se %uiere %ue la circunferencia de fondo sea $isible o no en la $entana grfica.


4.2.2.& "ontrol de imagen

Existen tres controles de la imagen en la $entana grfica. 8odos ellos funcionan pulsando sobre
el control con el ratn y deslizando en el sentido de la flec"a. El primero de ellos, desplaza la
imagen seg#n el eje 9, es decir, de forma "orizontal dentro de la $entana grfica. El segundo de
ellos, desplaza la imagen seg#n el eje :, de forma $ertical dentro de la $entana grfica. 1or
4+
ultimo, el tercero, desplaza la imagen seg#n el eje ;, acercando o alejando la imagen, lo %ue
pro$oca el efecto de aumentar o disminuir su tama!o.

El uso de estos controles grficos permite la obser$acin de detalles en grande, como son el
tallado del diente o la soca$acin en la base de los dientes.

Este control solo existe en la simulacin estndar, "abiendo eliminado de la experimental por
necesidad de espacio en la sub$entana de controles. Los mismos efectos se pueden realizar con
el uso del ratn. 1ulsando el botn iz%uierdo del ratn se pueden realizar los mo$imientos en la
figura seg#n el plano formado por los ejes 9<:, mientras %ue pulsar el botn derec"o del ratn
sir$e para mo$er la figura en el eje ;, aumentndola o disminuy,ndola. Esta ultima opcin
tambi,n es posible pulsando la tecla =5trl.> del teclado junto con el botn iz%uierdo del ratn.



4.&. Pan!l ! Da$os !n la Simulacin !s$'nar


-igura 4.4 1anel de datos en simulacin estndar


El primero de los datos a introducir es el n#mero de dientes %ue se %uiere obtener en el
engranaje. El segundo es el modulo, estando sus $alores limitados por la norma U?E .@00A.
Estos dos $alores determinan el dise!o del engranaje.

'ndicados esos dos $alores, los dimetros son recalculados automticamente para obtener un
engranaje estndar. (i se cambia alguno de los datos de las circunferencias, los $alores de las
otras circunferencias del dise!o son reajustados automticamente. 5ada $ez %ue el programa
recalcula alguno de los datos de dise!o, estos $alores son mostrados en la celda correspondiente.

El ngulo de presin es el siguiente parmetro de dise!o, y aun%ue esta predeterminado a 00B
es posible modificarlo al $alor deseado.

El siguiente de los parmetros %ue es posible utilizar es el coeficiente de desplazamiento C$er
+.0.0D en el %ue es posible realizar un desplazamiento de la "erramienta de tallado de su posicin
estndar, acercndola o alejndola del engranaje.
44
1or ultimo, se a!ade una eti%ueta %ue a$isa de %ue con los parmetros de dise!o indicados se
producir una soca$acin en el tallado del diente. En caso de no ser as, la ad$ertencia
desaparece. 5omo la soca$acin depende del n#mero de dientes y del ngulo, seg#n la formula
C0..*D, as como tambi,n del coeficiente de desplazamiento, el programa realiza los clculos
correspondientes y presenta una ad$ertencia.


Una $ez indicados los $alores %ue deseamos del engranaje, ya es posible iniciar la simulacin,
bien pulsando el botn &utomtico %ue realizar el tallado del engranaje o bien 4(iguiente 664
%ue proceder a realizar el siguiente mo$imiento de cremalleraEdisco de engranaje.



4.4. Pan!l ! Da$os !n la Simulacin !"#!rim!n$al


-ig. 4.A 1anel de datos en la simulacin experimental


Los datos son los mismos %ue para la simulacin estndar. La diferencia se encuentra en el
modulo ya %ue no nos atamos en el dise!o del engranaje a la norma U?E .@00A pudiendo elegir
cual%uier $alor posible para el mdulo.

En la simulacin experimental el resto de los a$os no s! r!calculan automticamente como
en la opcin estndar. (e pretende %ue el usuario "aga sus clculos de dise!o y compruebe %ue
es lo %ue se genera con esos parmetros. (i los clculos son correctos se obtendr un engranaje,
en caso contrario, el producto final puede ser defectuoso.



4.( Pan!l ISO )&&)


-igura 4.* 1anel de control '() *++*

4A
5omo se "a $isto, la norma '() *++* realiza dos recomendaciones en la geometra del diente,
una de ellas es el redondeo del radio de cabeza del diente de la cremallera. &%u se puede
introducir el $alor del radio %ue se %uiere para el redondeo. 5omo se puede apreciar en la figura
4.* el segundo de los parmetros, la depresin lateral del diente, esta des"abilitado con lo %ue no
se pueden introducir $alores. (olamente en el momento en %ue exista un $alor para el radio de
cabeza, se "abilitar la entrada para el $alor de la depresin lateral.

Fe esta forma, teniendo marcada la casilla =/ostrarE)cultar> se pueden crear dientes de
cremallera con redondeo de cabeza y con undercut o sin el.

La casilla =/ostrarE)cultar> puede ser utilizada en cual%uier momento de la simulacin lo %ue
nos permitir obser$ar los perfiles del engranaje aplicando este dise!o frente al dise!o estndar,
sin necesidad de tener %ue iniciar otra simulacin para comparar el efecto %ue tiene sobre el
engranaje.



4.). Pan!l ! i!n$! asim*$rico


-igura 4.G 1anel de opciones experimentales

(e puede experimentar con la creacin de engranajes con dientes asim,tricos, para ello es
necesario indicar el $alor del ngulo de presin para la segunda cara del diente, manteni,ndose
para la primera el ngulo de presin indicado en el campo de datos. &l igual %ue en el dise!o
seg#n '() *++*, es posible $isualizar o no su efecto mediante la opcin =/ostrarE)cultar>. El
dise!o del diente asim,trico no es incompatible con el dise!o '() *++* por lo %ue es posible
realizar simulaciones con ambos efectos y contrastarlos con un dise!o estndar.



4.+. La ,l!c-a ! la !.ormacin circular

El diente trapezoidal se puede deformar creando un perfil en el %ue los laterales del diente se
cur$an formando un sector circular %ue pasa por tres puntos dados por los $,rtices del trapecio y
el tercer punto $iene dado por el punto generado por la perpendicular al punto medio del lado
con una longitud indicada por el $alor de -lec"a.

Este dise!o no lo "emos "ec"o compatible con los otros dise!os Casimetra e '() *++*D por lo
%ue la entrada de datos en cual%uiera de los otros dise!os des"abilita la entrada del $alor de la
flec"a, y $ice$ersa, cuando se introduce un $alor para la flec"a, %uedan des"abilitadas las
opciones de entrada de datos correspondientes a los otros tipos de simulacin.


4*

4./. La Simulacin Es$'nar

En la simulacin estndar se generan los engranajes seg#n la norma U?E .@<00A<@4 '() A4
por lo %ue una $ez fijados el numero de dientes y el modulo, el resto de los parmetros de dise!o
%uedan fijados. &un%ue no sea necesario calcular el resto de los parmetros, en el simulador
podemos apreciar algunas de las caractersticas y problemas en el dise!o de engranajes rectos,
como puede ser la soca$acin del diente en engranajes con pocos dientes.


4.@... Heneracin de un engranaje recto con penetracin y sin ella

(imulacin partiendo de los $alores iniciales por defecto del programa.


-igura 4.@ (imulacin estndar .

La figura 4.@ nos muestra el proceso de tallado de un engranaje de .4 dientes, modulo . y
ngulo de presin 00B. El programa nos ad$ierte de la existencia de soca$acin del diente en este
dise!o.

1rocedemos al redise!o del mismo engranaje pero a"ora separando la "erramienta de corte,
dando un $alor al coeficiente de desplazamiento de 0.0. (e puede $er en la figura 4.I el proceso
de corte.

4G
(e puede apreciar la existencia de un punto anguloso en los dientes de la primera simulacin,
donde se origina la soca$acin, %ue "a desaparecido en el perfil de la segunda simulacin.


-igura 4.I (imulacin estndar 0

(e pueden "acer ampliaciones de los detalles de los dientes generados por ambas simulaciones
como se muestra en la figura 4..0



-igura 4..0 5omparati$a de dientes, con y sin soca$acin


4@
8ambi,n es obser$able %ue en el caso en el %ue se aplica un coeficiente de desplazamiento
positi$o a la "erramienta, se genera un perfil de diente mas alargado y afilado en su cabeza, as
como una base de diente mas anc"a.

&dems de poder obser$ar fenmenos como la penetracin y como se soluciona desplazando
la "erramienta de tallado, tambi,n es posible realizar simulaciones di$ersas jugando con los
parmetros de dise!o, con el ngulo de presin. 1artiendo de una gran di$ersidad de formas de
combinar los elementos de dise!o, se obtienen di$ersos resultados de forma prcticamente
inmediata.


4.@.0. 'nfluencia del ngulo girado en la formacin del perfil

(e puede obser$ar en la generacin de los perfiles de engranajes rectos %ue a menores $alores
del ngulo girado entre tallados, el perfil del diente es ms sua$e, mientras %ue a medida %ue el
$alor del ngulo girado aumenta los cortes realizados por la cremallera dejan perfiles dentados
%ue necesitan un mecanizado posterior.


-igura 4... 'nfluencia del ngulo girado

(e puede apreciar en la figura 4... como un tallado con ngulo girado de *B Cen lugar del
predeterminado .BD "ace aparecer en el perfil del diente del engranaje las marcas
correspondientes a los cortes ejercidos por la cremallera, dejando en el pie del diente escalones.


4I

4.0. La Simulacin E"#!rim!n$al

En este tipo de simulacin el programa acepta como parmetro de dise!o cual%uier $alor %ue
se le indi%ue y realiza el tallado del engranaje con los $alores indicados. El uso de este simulador
precisa realizar los clculos de dise!o correspondientes por parte del usuario y luego indicrselos
al programa. & diferencia del simulador estndar, no se realiza el recalculo de los parmetros
para obtener un engranaje estndar, plantendose su utilidad como "erramienta de comprobacin
y e$aluacin para las personas %ue est,n en procesos de aprendizaje de engranajes.


4.I... Engranaje recto

1artiendo de los mismos $alores predeterminados, procedamos a cambiar el modulo a ...A,
pero dejamos el resto de los parmetros de dise!o igual. J(e generar un engranajeK 1odemos
apreciar el resultado en la figura 4..0


-igura 4..0 Heneracin de un falso engranaje


5omo se puede $er, los dientes inferiores Cprimero y ultimoD estn tronzados por el corte de la
"erramienta, con lo %ue e$identemente, este engranaje no ser$ir para nada. La causa $iene dada
por el uso incorrecto de los parmetros de dise!o.


A0
4.I.0. Engranaje recto con recomendacin '() *++*

El simulador permite siguiendo las recomendaciones '() *++* redondear la cabeza del diente
de la cremallera y pro$ocar un rebaje lateral en el diente y generar un engranaje en el %ue se
puede apreciar un pie de diente menos recortado en su base, lo %ue aumenta su resistencia al
esfuerzo. 1ara ello indicamos los $alores con los %ue se %uiere experimentar en las celdas de
texto dise!adas para ello.



-igura 4..+ 1erfil de diente '() *++*



Una de las $entajas del simulador es %ue una $ez construida la simulacin es posible eliminar
$isualmente el efecto de aplicar las recomendaciones '() *++* simplemente des"abilitndolas
mediante la opcin =/ostrar E )cultar> tal como se puede comprobar en las figuras 4..+ y 4..4.

8ambi,n es apreciable en la figura 4..+ frente a la 4..4 %ue el perfil del diente de engranaje es
ligeramente mas anc"o, efecto producido por el rebaje lateral en el diente de cremallera, lo %ue
deja una capa de material extra en el diente del engranaje y permite un mejor mecanizado de
acabado del mismo.




A.

-igura 4..4 1erfil de diente '() *++* des"abilitado


4.I.+. 'nfluencia del ngulo girado por tallada en el dise!o seg#n '() *++*

Es de esperar %ue al eliminar las es%uinas de la cabeza del diente de la cremallera, al aumentar
el ngulo girado en cada tallada, el perfil del diente sea ms sua$e. (e puede apreciar en la figura
4..A como los escalones %ue se producan en la generacin del diente prcticamente "an
desaparecido, aun%ue el perfil generado sigua siendo algo irregular %ue precisa un mecanizado
para tener como resultado un perfil de in$oluta.


-igura 4..A 1erfil de diente '() *++* con ngulo girado de *B
A0
4.I.4. Engranaje recto con diente asim,trico

(e puede simular la generacin de engranajes rectos asim,tricos, dejando el ngulo de presin
estndar para una de las caras del diente e indicar el $alor del segundo ngulo de presin en la
celda preparada para ello. &l dar este segundo $alor, se entender %ue se desea generar un diente
asim,trico.

En la figura 4..A puede $erse el detalle de generar un engranaje con ngulos de presin de .@B
y 0AB. &l igual %ue en la simulacin anterior es posible anular su simulacin %uedando $isible la
e%ui$alente al mismo dise!o sim,trico.



-igura 4..A 1erfil de diente asim,trico



4.I.A. Engranaje recto con diente asim,trico con recomendaciones '() *++*

)tra de las caractersticas del simulador, es %ue se pueden explorar las posibilidades %ue
recomienda la norma '() *++* de redondear la cabeza y rebajar el lateral del diente con un perfil
de diente asim,trico.

En la figura 4..* puede apreciarse los detalles de los dientes de engranaje generados por una
cremallera asim,trica con un redondeo de cabeza y un rebaje lateral.

A+
1uede apreciarse al igual %ue en el caso de los dientes sim,tricos el reforzamiento de la base
del pie del engranaje y el aumento ligero del grosor de los dientes.


-igura 4..* 1erfil de diente asim,trico con redondeo de cabeza y undercut



4.11. La !.ormacin circular

J3ue sucede si el perfil trapezoidal del diente de la cremallera se modifica, por ejemplo,
creando un abombamiento circularK J5omo influye eso en las caractersticas del engranajeK

1ara ello, se indica en el campo -lec"a el $alor de la deformacin a aplicar al perfil trapezoidal
de la cremallera.

(e puede obser$ar %ue a medida %ue aumenta la -lec"a los dientes pierden su perfil
caracterstico de en$ol$ente para con$ertirse en dientes mas delgados y con un perfil mas
rectilneo como puede obser$arse en la figura 4..G.

A4

-igura 4..G 1erfil de diente deformado circularmente


55
CAPTULO 5. EL CODIGO FUENTE


El Cdigo del programa esta distribuido en tres ficheros: main.cpp que contiene el diseo y
funcionamiento del simulador por un lado, y mecanismos.cpp y mecanismos.h por el otro, que
definen los objetos del simulador como son el engranaje y la cremallera, a fin de facilitar la
modificacin del diseo de la cremallera mediante la modificacin del cdigo. Esta modularidad
permite que en el futuro, el programa pueda ser usado para disear otros perfiles de cremallera,
modificando nicamente el fichero mecanismos.cpp, sin necesidad de retocar la parte del cdigo
eistente en main.cpp bien que esas modificaciones sean m!nimas.

"igue una re#isin de los elementos mas significati#os del cdigo, eplic$ndose algunas de las
funciones empleadas en el programa, siendo necesario consultar las %&'s de cada librer!a para
informacin mas detallada, segn se indica en los aneos para ()*+ y ()*' o bien en la
bibliograf!a.



5.1. main.cpp

El fichero main.cpp contiene el cdigo utili,ado para la simulacin con llamadas a las
funciones de ()*+, ()*' y -pen() especificas que reali,an la simulacin. )a mec$nica de
funcionamiento del programa es la siguiente: se inicia el programa y se construyen las #entanas
de control y presentacin gr$fica, que se oculta. *na #e, seleccionada el tipo de simulacin a
reali,ar, se #isuali,a la #entana gr$fica, adem$s se pueden seleccionar e indicar los par$metros
de diseo mediante los controles gr$ficos, como son las cajas de teto, listas de seleccin y
botones.

*na #e, creada la #entana gr$fica e iniciali,ada, la maquina de estado de -pen() entra en un
bucle continuo hasta que el programa termina con el cierre de la #entana. )a #entana grafica se
crea con un doble buffer de memoria, de forma que lo que se #e en la pantalla esta escrito en uno
de los buffers, mientras que en el otro buffer procede a limpiar la informacin eistente y a
calcular el #alor de cada piel en funcin de las im$genes que componen la escena y que son
generadas geom.tricamente como composicin de graficas elementales. *na #e, terminado el
proceso de renderi,ado de la imagen, se indica al sistema operati#o que la #entana esta lista para
ser refrescada, con lo que se produce el cambio de buffer acti#o de la #entana mostr$ndose la
nue#a imagen generada. El buffer desacti#ado se limpia de lo que contiene y de nue#o se #uel#e
a generar la imagen en funcin de las #ariables, que pueden haber cambiado, bien por la
inter#encin del usuario del programa, bien por c$lculos reali,ados por el mismo programa.

)o primero que forma parte del fichero del cdigo fuente, son las listas de las #ariables que #an
a ser usadas en el programa, a fin de que el compilador reser#e memoria para cuando su uso sea
necesario en el funcionamiento normal del programa. /o se comentan en bloque ya que se
pueden #er descriptas en el propio cdigo fuente, y si es preciso, ser$n eplicadas en el momento
de uso en el programa.



50
5.1.1. 2uncin main3 4

Cualquier programa arranca con una llamada a la funcin main() que contiene todas las
instrucciones a reali,ar por el programa. %hora bien, a fin de aumentar la claridad del cdigo, es
habitual separar en funciones parte del cdigo que se hace repetidamente, quedando definidas
dichas funciones en el mismo cdigo antes de ser llamadas. +ambi.n se incluyen llamadas a
funciones definidas en otros ficheros, como librer!as eternas, con lo que es necesario indicar en
la cabecera del cdigo los ficheros eternos usados y que contienen funciones utili,adas en el
programa, o lo que es lo mismo, en la funcin main().

En primer lugar se iniciali,a el estado de ()*+ que permite la creacin de una #entana propia
del sistema operati#o sobre el que el programa esta funcionando. &or ello se empie,a reali,ando
una llamada a la ()*+ para iniciali,arla mediante la funcin glutInit()

glutInit (&argc, argv);

5ediante la funcin glutInitDisplayMode() se especifica las caracter!sticas que se requieren
de la #entana, entre ellas se solicita que la #entana disponga de un doble buffer GLUT_DOUBLE,
doble espacio de memoria para la presentacin gr$fica, de forma que mientras uno de los buffers
ofrece el resultado gr$fico, en el otro simult$neamente se #a calculando y dibujando la siguiente
escena que se har$ #isible.

glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH);

5ediante glutInitWindowPosition() se indica el lugar donde se debe crear esa #entana en
la pantalla, a 67 p!el a la derecha y hacia abajo de la esquina superior i,quierda de la pantalla.

GlutInitWindowPosition (20, 20);

"e especifica el tamao de la #entana mediante glutInitWindowSize() siendo el primer #alor
pasado a la funcin el ancho de la #entana y el segundo el alto en p!eles.

glutInitWindowSize (1000, 660);

*na #e, definida se pide al sistema operati#o una #entana con las caracter!sticas indicadas
mediante la funcin glutCreateWindow() y el sistema de#ol#er$ un puntero a la #entana
indicada que nuestro programa guardar$ en winIdMain, apro#echando para indicarle cual es el
titulo que se quiere que figure en la #entana creada.

winIdMain = glutCreateWindow("Simulador didactico de tallado de engranajes rectos");

"e capturan los e#entos generados por el ratn para que sean gestionados por ()*+ sobre los
elementos gr$ficos.

glutMotionFunc(activeMouseMotion);

"e iniciali,a la librer!a ()*', la cual se encarga de la creacin y gestin de los controles
gr$ficos a usar en el programa, como pueden ser los campos de teto en los que introducir
#alores, botones de control, etc.

58
gluiInit();

'niciali,a la #entana gr$fica donde se reali,a la simulacin, limpiando lo que pudiera haber y
diseando las caracter!sticas geom.tricas de la #entana.

initDisplay();

"e procede a ocultar la #entana donde se reali,a la simulacin, solo queda #isible la #entana
()*' con los paneles de informacin.

glutHideWindow();

*na #e, que se ha creado la #entana, se le han aadido controles gr$ficos y se ha limpiado y
diseado la #ista a presentar, el simulador empie,a a reali,ar los c$lculos continuamente y a
#olcar sus resultados en la #entana #isible del simulador. Este es un proceso c!clico y continuo
que sucede hasta que finali,a y se cierra la #entana.

glutMainLoop ();

Cuando el programa termina no de#uel#e ningn #alor.

return 0;



5.1.9. 2uncin glui'nit3 4

El diseo de los complementos gr$ficos del programa que interactan con el usuario es
gestionado por la librer!a ()*'. &or ello lo primero que se hace es indicar al sistema operati#o
que los e#entos que el usuario genera sobre la #entana del programa, bien por que usa el teclado,
el ratn pulsando sobre uno de los elementos gr$ficos de control del programa, los debe
comunicar a ()*' para que obre en consecuencia y eso se reali,a mediante las llamadas a las
funciones siguientes

GLUI_Master.set_glutIdleFunc(idle);
GLUI_Master.set_glutDisplayFunc(mainDisplay);
GLUI_Master.set_glutReshapeFunc(mainReshape);
GLUI_Master.set_glutKeyboardFunc(keyboard);
GLUI_Master.set_glutSpecialFunc(pressKey);
GLUI_Master.set_glutMouseFunc(mousePress);

"e crea una #entana ()*' asign$ndola a la #ariable de nombre glui. Esta #entana informar$
sobre el propio programa, autores, #ersin y adem$s dispondr$ de un par de botones para escoger
el tipo de simulacin a reali,ar. Cada #e, que se haga necesario indicar alguna propiedad o
funcin a reali,ar sobre la #entana se har$ sobre la #ariable a la que se ha asignado, es decir,
sobre glui.

glui = GLUI_Master.create_glui(const_cast<char*>("Simulador didactico"));

5:
% la #entana de controles ()*' se le aade un panel mediante la propiedad add_panel() y se
asigna a la #ariable glui_firma. %l crear el panel se puede indicar el teto que aparece como
cabecera del mismo.

glui_firma = glui->add_panel(
const_cast<char*>
("UNED. Ingeniera Industrial. Proyecto fin de carrera"));

"e procede a incluir teto en el panel mediante al propiedad de la #entana ()*'
add_statictext_to_panel() pas$ndole dos #ariables, la primera de ellas es el nombre de la
#ariable que apunta al panel donde incluir el teto y la segunda es el teto a incluir.

glui->add_statictext_to_panel(glui_firma,
const_cast<char*>("Director del proyecto:"));

"e sigue incluyendo el resto del teto a incluir en el panel

glui->add_statictext_to_panel(glui_firma,
const_cast<char*>(" Eduardo Gomez Garcia"));
glui->add_statictext_to_panel(glui_firma,
const_cast<char*>(" egomez@ind.uned.es"));

"e indica que se desea una nue#a columna en el panel mediante la propiedad
add_column_to_panel() siendo el primero de los par$metros el puntero al panel donde se crea
la columna y la segunda #ariable indica si se debe crear o no una l!nea #ertical separando la
columna, en este caso se indica que la l!nea de separacin sea #isible.

glui->add_column_to_panel(glui_firma, true);

"e aade mas informacin de teto a la segunda columna del panel:

glui->add_statictext_to_panel(glui_firma, const_cast<char*>("Alumno:"));
glui->add_statictext_to_panel(glui_firma,
const_cast<char*>(" Daniel Costas Rodriguez"));
glui->add_statictext_to_panel(glui_firma,
const_cast<char*>(" dcostas@gmail.com"));

"e crea una tercera columna en el panel y se aade el teto correspondiente

glui->add_column_to_panel(glui_firma, true);
glui->add_statictext_to_panel(glui_firma, const_cast<char*>(""));
glui->add_statictext_to_panel(glui_firma,
const_cast<char*>("Versin 2.00"));

"e deja una l!nea #ac!a, se aade un separador hori,ontal y otra l!nea #ac!a 3por efectos
est.ticos4.

glui->add_statictext(const_cast<char*>(""));
glui->add_separator();
glui->add_statictext(const_cast<char*>(""));

"e procede a aadir a la #entana ()*' otro panel que se asigna a la #ariable glui_datos
indicando que este panel es para seleccionar la forma de reali,ar la simulacin.

5;
glui_datos = glui->add_panel(
const_cast<char*>("Forma de realizar la simulacion"));

"e aade a la #entana ()*' un botn mediante su propiedad add_button_to_panel(),
indicando que dicho botn forma parte del panel indicado en la #ariable glui_datos, el teto
que contiene el botn <"imulacin est$ndar<, el #alor de una constante SIMU_NORMA_ID y una
funcin glui_control(). Cuando el usuario pulse este botn, el programa llamar$ a la funcin
indicada glui_control() pas$ndole como par$metro el #alor de la constante indicada
SIMU_NORMA_ID.

glui->add_button_to_panel(glui_datos,
const_cast<char*>("Simulacion normalizada"),
SIMU_NORMA_ID,
glui_control);

"e aade mas teto al panel, aclarando la informacin sobre el uso del botn.

glui->add_statictext_to_panel(glui_datos,
const_cast<char*>(" Realiza una simulacin del tallado de un
engranaje recto siendo"));
glui->add_statictext_to_panel(glui_datos,
const_cast<char*>(" conocido el numero de dientes y el
dimetro primitivo."));

"e aade un rengln #ac!o, y luego un botn que al ser pulsado llama a la funcin
glui_control( ) pas$ndole como par$metro la constante SIMU_TRAPECIO_ID. )uego se
aade m$s teto eplicati#o de la opcin de usar este botn.

glui->add_statictext_to_panel(glui_datos, const_cast<char*>(""));
glui->add_button_to_panel(glui_datos,
const_cast<char*>("Simulacin experimental con perfil
trapezoidal"),
SIMU_TRAPECIO_ID,
glui_control);
glui->add_statictext_to_panel(glui_datos,
const_cast<char*>(" Realiza una simulacin del tallado de un
engranaje recto definiendo"));
glui->add_statictext_to_panel(glui_datos,
const_cast<char*>(" los parmetros del perfil
de la cremallera."));

"e aade otro rengln #ac!o y otro botn para salir del programa.

glui->add_statictext(const_cast<char*>(""));
glui->add_button(const_cast<char*>("Salir"), 0, (GLUI_Update_CB) exit);
informa = glui->add_statictext(const_cast<char*>(""));

*na #e, creada la #entana ()*' hay que indicar a que #entana pertenece y se indica mediante
la propiedad set_main_gfx_window() indic$ndole como #ariable la que apunta a winIdMain,
la #entana ()*+ de nuestro programa.

glui->set_main_gfx_window(winIdMain);

=e esta forma queda creada la primera #entana de controles ()*' del programa.

07

5.1.>. 2uncin glui?control3 4

Esta funcin es la encargada de capturar y gestionar las pulsaciones en los botones de la
#entana ()*' inicial del programa donde se selecciona el tipo de seleccin a seguir.

)o primero es asignar el #alor que entra a la funcin a la #ariable general QueSimula donde
queda guardado el tipo de simulacin que el usuario ha solicitado.

QueSimula = control;

En primer lugar se oculta la #entana ()*' con los controles de seleccin del tipo de
simulacin, llamando a la propiedad hide() del objeto apuntado por la #ariable glui.

glui->hide();

"e hace #isible la #entana ()*+ que fue creada al inicio del programa y luego ocultada. En
esta #entana es donde se reali,a la simulacin gr$fica.

glutShowWindow();

=entro de la #entana se procede a la creacin de una sub#entana ()*' que ser$ la que
contiene los controles espec!ficos y que se coloca al lado i,quierdo de la #entana.

v_glui = GLUI_Master.create_glui_subwindow(winIdMain, GLUI_SUBWINDOW_LEFT);

"e crea un panel en la #entana ()*' y se etiqueta con <=atos<, asign$ndolo a la #ariable
glui_dato. )a creacin se reali,a llamando a una propiedad disponible en la sub#entana ()*'
indicada por la #ariable !_glui indicando que forma parte de la misma.

glui_datos = v_glui->add_panel(const_cast<char*>("Datos"));

=entro del panel de datos se crean una serie de cajas de entrada de teto, siendo la primera de
ellas para preguntar el nmero de dientes que debe tener el engranaje. &ara ello se usa la
propiedad add_edittext_to_panel() pas$ndole como #alores, el panel donde esta situado, la
etiqueta de teto, el tipo de dato que maneja 3siendo GLUI_EDITTEXT_INT un entero4, un
puntero a una #ariable que cambie cuando cambia el #alor de la caja de teto o NULL si no
apunta a ninguna, una constante para pasar a la funcin DATOS_DIENTES_ID, y una funcin a la
que llamar cuando cambie su #alor v_glui_control

glui_Dientes = v_glui->add_edittext_to_panel(glui_datos,
const_cast<char*>
("Numero de dientes "),
GLUI_EDITTEXT_INT,
NULL,
DATOS_DIENTES_ID,
v_glui_control);

*na #e, creada la caja de teto se iniciali,a asign$ndole como #alor sugerido para nmero de
dientes el 16 y a la #e, se asigna ese #alor a la #ariable Z que es la que guarda en el programa el
nmero de dientes del engranaje.
01

glui_Dientes->set_int_val(14);
Z = 14;

% medida que se #an creando los controles gr$ficos, los #alores correspondientes son
asignados a #ariables que forman parte del programa y en las que se guardan los #alores
correspondientes, a fin de ser usados en diferentes partes del programa.

"e crea un s@itch en funcin del tipo de simulacin que se #a a reali,ar ya que la forma de
tratar el modulo es diferente en la situacin est$ndar 3est$n normali,ados sus #alores4 de la
eperimental. "e ejecutar$ el cdigo entre lla#es que coincida con el #alor de la #ariable
control.

switch(control)

En el caso de que el #alor de control sea SIMU_NORMA_ID significa que el usuario ha pulsado
el botn correspondiente a una simulacin est$ndar.

case SIMU_NORMA_ID:

&ara el modulo, se necesita una lista correspondiente a los mdulos indicados en la norma
*/E 1:775:1;:6 por lo que se crea un listbo mediante la propiedad del objeto ()*'
add_listbox_to_panel() indic$ndole el panel del que forma parte, la etiqueta, que no se
asigna a ninguna #ariable y que la constante a pasar a la funcin llamada v_glui_control,
cuando se reali,a algn cambio, es DATOS_MODULO_ID

glui_Modulo = v_glui->add_listbox_to_panel(glui_datos,
const_cast<char*>("Modulo "),
NULL,
DATOS_MODULO_ID,
v_glui_control);

*na #e, creada, se le asignan los #alores que indica la norma */E y que est$n en el #ector
MODULO[] definido en la cabecera de main.cpp. &ara ello se lee cada uno de los #alores del
#ector y se asigna a la lista. &or ultimo se asigna como #alor predeterminado el correspondiente
al !ndice 7 del listado.

for (int i=0; i<18; i++)
{
glui_Modulo->add_item(i, const_cast<char*>(MODULO[i]));
}
glui_Modulo->set_int_val(0);

A con la sentencia breaB se sale del s@itch continuando el programa en la l!nea siguiente al
cierre del selector s@itch.

break;

CDue sucede si el #alor pasado a la funcin es SIMU_TRAPECIO_IDE El usuario ha escogido
que desea hacer una simulacin eperimental. El modulo ya no se asigna por los #alores de la
norma */E, sino que pueden ser introducidos por el usuario del programa, por lo tanto para su
creacin se usa un campo de teto.
09

glui_Modulo_T = v_glui->add_edittext_to_panel(glui_datos,
const_cast<char*>
("Modulo "),
GLUI_EDITTEXT_FLOAT,
NULL,
DATOS_MODULO_ID,
v_glui_control);
glui_Modulo_T->set_float_val(1.0);

break;

"e cierra el s@itch y se sigue aadiendo mas controles al panel.

"e crea otro campo de teto para el di$metro de la circunferencia primiti#a, asign$ndole como
#alor inicial 16. =ado que el usuario no puede modificar la informacin de este campo se
deshabilita mediante la propiedad disable() del control gr$fico y se procede a iniciali,ar la
#ariable Rp, correspondiente al radio de la circunferencia de paso. que guarda en el programa el
#alor del radio de paso siendo inicialmente 8

glui_RPaso = v_glui->add_edittext_to_panel(glui_datos,
const_cast<char*>("Diametro circunferencia primitiva"),
GLUI_EDITTEXT_FLOAT,
NULL,
DATOS_DIAMETRO_PRI_ID,
v_glui_control);
glui_RPaso->set_float_val(14);
glui_RPaso->disable();
Rp = 7;

=e la misma forma se crea e iniciali,a el campo de teto correspondiente al di$metro de la
circunferencia eterior del engranaje iniciali,$ndolo a 10, dej$ndolo deshabilitado para la
modificacin por parte del usuario del programa e iniciali,ando la #ariable Rc a : como #alor
para el radio eterior del engranaje.

glui_RCabeza = v_glui->add_edittext_to_panel(glui_datos,
const_cast<char*>
("Diametro exterior "),
GLUI_EDITTEXT_FLOAT,
NULL,
DATOS_DIAMETRO_EXT_ID,
v_glui_control);
glui_RCabeza->set_float_val(16);
glui_RCabeza->disable();
Rc = 8;

"e crea otra etiqueta para la circunferencia base y se iniciali,a, lo mismo que la #ariable Rb
donde se guardar$ el #alor del radio de la circunferencia base del diseo a crear.

glui_RBase = v_glui->add_edittext_to_panel(glui_datos,
const_cast<char*>
("Diametro interior "),
GLUI_EDITTEXT_FLOAT,
NULL,
DATOS_DIAMETRO_INT_ID,
v_glui_control);
glui_RBase->set_float_val(11.5);
glui_RBase->disable();
0>
Rb = 5.75;

Es necesaria otra etiqueta correspondiente al $ngulo de presin, que se crea e iniciali,a a un
#alor para el $ngulo de presin de 97F. El #alor es guardado tambi.n en la #ariable Angulo.

glui_Angulo = v_glui->add_edittext_to_panel(glui_datos,
const_cast<char*>("Angulo de presion "),
GLUI_EDITTEXT_FLOAT,
NULL,
DATOS_ANGULO_ID,
v_glui_control);
glui_Angulo->set_float_val(20);
Angulo = 20;

El campo de teto correspondiente a la penetracin se crea al igual que los anteriores y se
iniciali,a con #alor 7

glui_Penetracion = v_glui->add_edittext_to_panel(glui_datos,
const_cast<char*>
("Penetracion "),
GLUI_EDITTEXT_FLOAT,
NULL,
DATOS_PENETRACION_ID,
v_glui_control);
glui_Penetracion->set_float_val(0);

Como la simulacin del diente segn la norma '"- 0>>0, la simulacin del diente asim.trico y
el diente de cremallera con perfil de circunferencia son espec!ficas de la simulacin eperimental
y sus datos no forman parte de la simulacin est$ndar, estos paneles se crean con el condicional
de que se trata de una simulacin eperimental.

if (control == SIMU_TRAPECIO_ID) {

"e aade un panel que engloba todos los datos correspondientes al diseo '"- 0>>0 dentro de
la sub#entana de controles gr$ficos.

glui_iso = v_glui->add_panel(const_cast<char*> ("ISO 6336"));

"e crea un checBbo que marcado hace #isible el efecto de aplicar las recomendaciones para la
construccin del diente dados por la norma '"- 0>>0, dejando asignado como #alor
predeterminado el que este acti#ado.

glui_ISO = v_glui->add_checkbox_to_panel(glui_iso,
const_cast<char*> ("Mostrar / Ocultar"),
&C_ISO,
-1);
glui_ISO->set_int_val(1);

"e crean los campos para la entrada de los par$metros caracter!sticos de esta simulacin: el
radio del redondeo de cabe,a del diente de cremallera y el undercut o depresin en el perfil
lateral del diente. "e asigna el 7 como #alores predeterminados para ambos campos y se deja
deshabilitada la opcin de la depresin lateral del diente, ya que para que sea posible aplicarla es
necesario que el diente tenga la cabe,a redondeada, de esta forma se e#ita que se le puedan
asignar #alores de depresin cuando no eista redondeo en la cabe,a del diente.
06

glui_radio = v_glui->add_edittext_to_panel(glui_iso,
const_cast<char*> (" Radio de cabeza "),
GLUI_EDITTEXT_FLOAT,
NULL,
DATOS_ISO_RADIO_ID,
v_glui_control);
glui_radio->set_float_val(0);

glui_depresion = v_glui->add_edittext_to_panel(glui_iso,
const_cast<char*> (" Depresin lateral del diente "),
GLUI_EDITTEXT_FLOAT,
NULL,
DATOS_ISO_DEPRE_ID,
v_glui_control);
glui_depresion->set_float_val(0);
glui_depresion->disable();

=e la misma forma se crea un panel para incluir otros dos paneles, uno para disear dientes
asim.tricos y otro para disear perfiles de diente circulares.

glui_experimental = v_glui->add_panel(
const_cast<char*> ("Experimental"));

"e crea el panel para la generacin de un diente asim.trico, con un checBbo para hacerlo
#isible o no y se pregunta cual es el #alor del $ngulo de presin en la segunda cara del diente. "e
deja como #alor prederminado para el $ngulo de presin 97F.

glui_asimetrico = v_glui->add_panel_to_panel(glui_experimental,
const_cast<char*> ("Diente asimetrico"));

glui_C_Asimetria = v_glui->add_checkbox_to_panel(glui_asimetrico,
const_cast<char*> ("Mostrar / Ocultar"),
&C_Asimetria,
-1);
glui_C_Asimetria->set_int_val(0);

glui_Angulo_2 = v_glui->add_edittext_to_panel(glui_asimetrico,
const_cast<char*> (" 2 Angulo "),
GLUI_EDITTEXT_FLOAT,
NULL,
DATOS_ANGULO_2_ID,
v_glui_control);
glui_Angulo_2->set_float_val(20);
Angulo_2 = 20;

"e aade un separador #ertical, dentro del panel eperimental antes de colocar el siguiente
panel y se le asigna como segundo par$metro false para que no sea #isible.

v_glui->add_column_to_panel(glui_experimental, false);

"e crea el otro panel eperimental, el correspondiente a la deformacin circular del diente
solicitando el #alor de la flecha eistente por la perpendicular al perfil recto del diente en el
punto de corte con el di$metro de paso.

glui_circular = v_glui->add_panel_to_panel(glui_experimental,
const_cast<char*> ("Deformacion circular"));

glui_C_Flecha = v_glui->add_checkbox_to_panel(glui_circular,
05
const_cast<char*> ("Mostrar / Ocultar"),
&C_Flecha,
-1);
glui_C_Flecha->set_int_val(1);

glui_Flecha = v_glui->add_edittext_to_panel(glui_circular,
const_cast<char*> ("Flecha "),
GLUI_EDITTEXT_FLOAT,
NULL,
DATOS_FLECHA_ID,
v_glui_control);
glui_Flecha->set_float_val(0);

*na #e, creados los paneles espec!ficos de la simulacin eperimental, con sus controles
gr$ficos para la entrada y manejo de datos, el if condicional se cierra, a fin de seguir diseando
y creando el resto de controladores gr$ficos comunes a las dos formas de simulacin.

El siguiente paso es proceder a la creacin de otro panel para la seleccin de los colores de los
elementos que componen la simulacin gr$fica. Este panel se puede comprimir o etender, segn
sea necesario y para crearlo se utili,a la propiedad de la #entana ()*' add_rollout(),
pas$ndole como #ariables la etiqueta del panel e indicando si inicialmente el panel esta abierto
3true4 o cerrado 3false4

glui_Color = v_glui->add_rollout(const_cast<char*>
("Seleccion del color"), true);

"e crea un grupo de <Gadio Huttons< que contendr$ la relacin de objetos cuyo color es
modificable. &ara ellos se usa la propiedad de la #entana ()*' add_radiogroup_to_panel()
indicando el panel del que forma parte, que no esta #inculado con ninguna #ariable del programa
3NULL4, la constante DATOS_ELEMENTOS_ID y la funcin v_glui_control() a la que se
llamar$ cuando se seleccione algn radio button.

glui_Elementos = v_glui->add_radiogroup_to_panel(glui_Color,
NULL,
DATOS_ELEMENTOS_ID,
v_glui_control);

*na #e, creado el grupo, hay que aadir los radio button al grupo mediante la propiedad
add_radiobutton_to_group(), indicando el nombre del grupo al que se aaden, y la etiqueta.
"e procede a aadir uno por cada elemento gr$fico: el fondo de la #entana, el engranaje, la
cremallera y las circunferencias de fondo y de paso.

glui_Fondo = v_glui->add_radiobutton_to_group(glui_Elementos,
const_cast<char*>("Fondo de la ventana"));
glui_Engranaje = v_glui->add_radiobutton_to_group(glui_Elementos,
const_cast<char*>("Engranaje"));
glui_Cremallera = v_glui->add_radiobutton_to_group(glui_Elementos,
const_cast<char*>("Cremallera"));
glui_C_Fondo = v_glui->add_radiobutton_to_group(glui_Elementos,
const_cast<char*>("Circunferencia de fondo"));
glui_C_Paso = v_glui->add_radiobutton_to_group(glui_Elementos,
const_cast<char*>("Circunferencia de paso"));

"e aade una columna al panel con una l!nea #ertical de separacin y se marca como #alor
predeterminado para el grupo de radio buttons el primero de la lista.
00

v_glui->add_column_to_panel(glui_Color, true);
glui_Elementos->set_int_val(0);

)os colores se crean por la composicin de tres elementos b$sicos, el rojo, el #erde y el a,ul,
#ariando la componente de color entre 7 3ausencia total del color4 hasta 1 3participacin total del
color4 por lo que para su seleccin se utili,ara el objeto ()*' denominado spinner que permite
la seleccin de un #alor acotado por arriba y por abajo. &ara ello se recurre a la propiedad
add_spinner_to_panel() indic$ndole el panel del que forma parte, la etiqueta #isible para el
usuario, el tipo de numero que es, GLUI_SPINNER_FLOAT, de coma flotante, que no se asocia a
ninguna #ariable 3NULL4, la constante COMPONENTE_ROJO_ID, que se pasar$ a la funcin
v_glui_control() cuando se produ,ca alguna #ariacin en su #alor. )uego, s. iniciali,a con
los #alores inferior y superior que puede tener mediante la propiedad set_float_limits() y se
indica la #elocidad con la que cambia su #alor al ser pulsada una de las flechas del control para
incrementarlo o disminuirlo, mediante la propiedad set_speed(), siendo m$s r$pido el
incremento cuanto mayor sea su #alor.

glui_Rojo = v_glui->add_spinner_to_panel(glui_Color,
const_cast<char*>("Rojo"),
GLUI_SPINNER_FLOAT,
NULL,
COMPONENTE_ROJO_ID,
v_glui_control);
glui_Rojo->set_float_limits(0.0, 1.0, GLUI_LIMIT_CLAMP);
glui_Rojo->set_speed(1);

=e igual manera se crean los controles para los colores #erde y a,ul.

glui_Verde = v_glui->add_spinner_to_panel(glui_Color,
const_cast<char*>("Verde"),
GLUI_SPINNER_FLOAT,
NULL,
COMPONENTE_VERDE_ID,
v_glui_control);
glui_Verde->set_float_limits(0.0, 1.0, GLUI_LIMIT_CLAMP);
glui_Verde->set_speed(1);

glui_Azul = v_glui->add_spinner_to_panel(glui_Color,
const_cast<char*>("Azul"),
GLUI_SPINNER_FLOAT,
NULL,
COMPONENTE_AZUL_ID,
v_glui_control);
glui_Azul->set_float_limits(0.0, 1.0, GLUI_LIMIT_CLAMP);
glui_Azul->set_speed(1);

"e crea un panel m$s para incluir los controles correspondientes a otras opciones.

glui_opciones = v_glui->add_panel(const_cast<char*>("Opciones"));

% este panel se le aade una etiqueta de teto para indicar el $ngulo de giro del engranaje
despu.s de cada corte de la cremallera. Este objeto contiene datos enteros
GLUI_EDITTEXT_INT. "e iniciali,a a 1F y tambi.n se iniciali,a al mismo #alor la #ariable
E_incremento, que ser$ la encargada de guardar el #alor del $ngulo que tiene que girar el disco
donde se talla el engranaje entre cada mordida de la cremallera.
08

glui_Giro = v_glui->add_edittext_to_panel(glui_opciones,
const_cast<char*>("Angulo girado por tallada "),
GLUI_EDITTEXT_INT,
NULL,
DATOS_GIRO_ID,
v_glui_control);
glui_Giro->set_int_val(1);
E_incremento = 1;

El control por parte del usuario del programa se reali,a por medio de cuatro botones, de los
cuales el primero puede ser usado para detener la simulacin y reiniciarla desde el principio.

glui_Clear = v_glui->add_button_to_panel(glui_opciones,
const_cast<char*>("Reiniciar"),
CLEAR_ID,
v_glui_control);

El segundo botn permite cambiar la forma de reali,ar la simulacin escogiendo la forma
autom$tica, que el programa reali,a mo#imiento a mo#imiento o manual, donde el usuario
escoge el siguiente corte de la cremallera al engranaje o bien retrocede hacia atr$s.

glui_AutoOnOff = v_glui->add_button_to_panel(glui_opciones,
const_cast<char*>("Automatico"),
MODO_SIMULAR_ID,
v_glui_control);

&ara controlar el mo#imiento de forma manual se hace necesario la creacin de dos botones,
uno para solicitar un mo#imiento hacia adelante en el tallado del engranaje y otro para reali,ar el
mo#imiento hacia atr$s. =ado que se esta en la posicin original del proceso de simulacin, no
es posible ir hacia atr$s con lo que se deshabilita el botn correspondiente mediante la propiedad
disable() del mismo.

glui_Sig = v_glui->add_button_to_panel(glui_opciones,
const_cast<char*>("Siguiente >>"),
MOVER_ADELANTE_ID,
v_glui_control);

glui_Ant = v_glui->add_button_to_panel(glui_opciones,
const_cast<char*>("<< Anterior"),
MOVER_ATRAS_ID,
v_glui_control);
glui_Ant->disable();

% fin de permitir al usuario, que haga #isible o no las circunferencias de paso y de fondo se
aaden dos controles del tipo checBbo mediante la propiedad add_checkbox_to_panel()
indic$ndole al panel al que pertenece, la etiqueta para el usuario, y en este caso se asigna su #alor
a una #ariable del programa C_Paso_ON de forma que cuando cambie el nue#o #alor sea
asignado a la #ariable indicada. /o se define ninguna funcin a la que llamar cuando #aria el
#alor y la constante <I1< que ser!a la que pasar!a la funcin en caso de ser llamada no se usa. ".
iniciali,a asign$ndole el #alor 1 para indicar que las circunferencias sean #isibles.

glui_CPaso = v_glui->add_checkbox_to_panel(glui_opciones,
const_cast<char*>
("Circunferencia de paso "),
&C_Paso_ON,
0:
-1);
glui_CPaso->set_int_val(1);

glui_CFondo = v_glui->add_checkbox_to_panel(glui_opciones,
const_cast<char*>("Circunferencia de fondo"),
&C_Fondo_ON,
-1);
glui_CFondo->set_int_val(1);

5ediante un condicional se procede a la creacin de un panel que permiten el manejo de la
imagen generada mediante controles gr$ficos, actuando sobre los ejes de referencia del sistema,
pero estos controladores solo aparecer$n en la simulacin est$ndar, ya que en la simulacin
eperimental llenan en eceso la #entana del programa y su utilidad puede ser sustituida por el
uso del ratn
.
"e aade al panel eistente v_glui mediante la propiedad add_panel_to_panel() indicando
el panel del que forma parte y la etiqueta.

glui_zoom = v_glui->add_panel_to_panel(glui_opciones,
const_cast<char*>("Control de imagen"));

El primero de los controles que se aade permite el despla,amiento de la imagen segn el
sentido del eje J, es decir, de forma hori,ontal por la pantalla. &ara crearlo se recurre a la
propiedad add_translation_to_panel() indic$ndole el panel al que pertenece, la etiqueta para
el usuario, una constante GLUI_TRANSLATION_X, para indicar que el despla,amiento se har$
solo en la direccin del eje J, y por ultimo, una #ariable, trans[0], que recoger$ su #alor si se
produce algn cambio por la inter#encin del usuario del programa.

v_glui->add_translation_to_panel(glui_zoom,
const_cast<char*>("X"),
GLUI_TRANSLATION_X,
&trans[0]);

"e aade una nue#a columna al panel pero sin l!nea #ertical de separacin, por lo que se le
pasa como segundo par$metro false.

v_glui->add_column_to_panel(glui_zoom, false);

"e aade un nue#o control pero con la constante GLUI_TRANSLATION_Y se le indica que el
despla,amiento se har$ nicamente en la direccin del eje A, es decir, en el sentido #ertical. "i se
reali,a algn cambio la #ariable trans[1] recoger$ el nue#o #alor.

v_glui->add_translation_to_panel(glui_zoom,
const_cast<char*>("Y"),
GLUI_TRANSLATION_Y,
&trans[1]);

"e aade una nue#a columna al panel sin separacin.

v_glui->add_column_to_panel(glui_zoom, false);

0;
"e crea el tercero de los controles indicando que el posible despla,amiento se reali,ar$ en el
sentido del eje K, GLUI_TRANSLATION_Z, y que la #ariable trans[2] recoge el #alor del
cambio.

v_glui->add_translation_to_panel(glui_zoom,
const_cast<char*>("Z"),
GLUI_TRANSLATION_Z,
&trans[2]);

'ndicar que trans[] es un #ector que recoge en sus tres componentes 3, y, ,4 el
despla,amiento que de la imagen se ha hecho por parte del usuario en el espacio tridimensional.

El ltimo de los controles gr$ficos a aadir es un botn para salir de la simulacin

v_glui->add_button(const_cast<char*>("Salir"),
SALIR_ID, v_glui_control);

". iniciali,an algunas #ariables del programa.

Origen indica el origen de referencia para colocar la cremallera segn el eje J. "i el engranaje
#a a estar situado en el centro del sistema de coordenadas, la cremallera estar$ situada por debajo
del sistema de referencia a una distancia dada por:

Origen = -Rc - 2 * (Rc - Rb);

El despla,amiento #ertical que la cremallera recorre con cada mo#imiento, C_Paso_Y, es la
siguiente #ariable que s. iniciali,a. En el mo#imiento #ertical de la cremallera es necesario tener
en cuenta si eiste penetracin. "i la penetracin es positi#a, lo que se hace es despla,ar los
dientes con respecto a la base de la cremallera la longitud de la penetracin. Esto se reali,a en el
diseo de la cremallera, por lo que no influye en el despla,amiento #ertical de la cremallera. En
caso de que la penetracin es negati#a, lo se se hace es acortar el recorrido #ertical de la
cremallera en su longitud.
El #alor del despla,amiento #ertical de la cremallera se obtiene di#idiendo entre 17 el recorrido
total a reali,ar por la cremallera desde su posicin mas baja, Origen, hasta su posicin m$s alta
segn el eje A.

if (Penetracion > 0) {
C_Paso_Y = 2 * (Rc - Rb) / 10;
} else {
C_Paso_Y = (2 * (Rc - Rb) + Penetracion) / 10;
}

"e calcula el #alor del paso circular y se guarda en la #ariable Paso. El nmero L se lee de la
librer!a matem$tica Mmath.hN, M_PI, siendo Rp el radio de paso y Z el nmero de dientes.

Paso = 2 * M_PI * Rp / Z;

"e hace necesario reser#ar memoria para el #ector C_Historia_X que guardar$ las posiciones
con respecto al eje J de la cremallera en cada posicin correspondiente a cada $ngulo de giro del
engranaje. El #ector contendr$ tantos elementos como posiciones fijas tenga el engranaje en el
87
proceso de talla. "e calcula di#idiendo los >07F del circulo entre el $ngulo girado por el
engranaje para pasar de una posicin de talla a la siguiente.

C_Historia_X = (float *) calloc((int) ceil(360/E_incremento),
sizeof(float));

El siguiente mo#imiento que debe reali,ar la cremallera para iniciar la simulacin es subir
acerc$ndose al engranaje. Esto es recogido en la #ariable C_Mueve asign$ndole el #alor
constante SUBIR_ID

C_Mueve = SUBIR_ID;

+erminada de crear la sub#entana ()*' se indica en que #entana debe ser redibujada

v_glui->set_main_gfx_window(winIdMain);

Como la #entana gr$fica ()*+ creada originalmente para la simulacin gr$fica ha quedado
disminuida en el $rea ocupada por la sub#entana ()*' creada, es necesario recalcular el $rea
que queda libre para la simulacin y asignarlo como tal. Este proceso es reali,ado por la funcin
GLUI_Master.auto_set_viewport()

GLUI_Master.auto_set_viewport();



5.1.6. 2uncin #?glui?control3 4

Esta funcin es la encargada de la gestin de los e#entos generados sobre la #entana ()*' que
contiene los controles de entrada de datos.

En primer lugar se declaran algunas #ariables a usar en algn lugar de la funcin.

float tpAngulo, tpLimite;

*na #e, creadas las #ariables, el comportamiento de la funcion #iene dado por un par$metro
que indica cual es la causa de la llamada a esta funcion y ser$ ese par$metro el que determine lo
que hay que reali,ar discriminando mediante la sentencia switch()

switch(control)
{
case CLEAR_ID:


)a constante CLEAR_ID #iene generada por el botn de reiniciar la simulacin, con lo que se
procede a reiniciar las #ariables.
)a #ariable Primera_Vez indica que se #a a proceder a dar el primer corte al engranaje por lo
que su #alor se pasa a true

Primera_Vez = true;

81
)a #ariable C_Y indica la posicin de la cremallera segn el eje A respecto a Origen, por lo
que su #alor se iguala a 7

C_Y = 0;

C_Contador cuenta el numero de pasos dados por la cremallera en el sentido del eje A siendo
7 cuando la cremallera est$ en su posicin mas baja y 17 en su posicin mas alta.

C_Contador = 0;

El sentido del mo#imiento de la cremallera cuando se inicia la simulacin es en el sentido
creciente del eje A, esto se recoge asign$ndoselo a la #ariable C_Mueve

C_Mueve = SUBIR_ID;

"e seala la posicin de la cremallera segn el eje J

C_X = 0;

Conta_h es la encargada de contar las posiciones ocupadas por la cremallera en el tallado del
engranaje, por lo que se iguala a 1

Conta_h = 1;

E_angulo se encarga de guardar el $ngulo girado por el engranaje desde el comien,o de la
simulacin, por lo que es reiniciado a 7

E_angulo = 0;

El despla,amiento #ertical de la cremallera se iguala a 7

C_Desplaza = 0;

El contador de dientes reali,ados en el engranaje se iguala a 7

Diente = 0;

El proceso se seala como manual por lo que:

Stop = true;

*na #e, iniciali,adas las #ariables del programa, tambi.n es necesario reiniciar los controles
gr$ficos del simulador, por ello se habilita el botn de dar el siguiente paso hacia adelante en la
simulacin

glui_Sig->enable();

"e habilita el botn de 5anualO%utom$tico y se le coloca la etiqueta de %utom$tico

glui_AutoOnOff->enable();
glui_AutoOnOff->set_name(const_cast<char*>("Automatico"));
89

=e los campos de teto comunes a ambas simulaciones y que forman parte del panel de datos
como el nmero de dientes, las circunferencias, la penetracin y el $ngulo girado en cada tallada
son iniciali,ados a los mismos #alores de diseo, as! como tambi.n las #ariables asociadas en el
programa.

glui_Dientes->enable(); // Numero de dientes
glui_Dientes->set_int_val(14);
Z = 14;

glui_RPaso->enable(); // Circunferencia primitiva
glui_RPaso->set_float_val(14);
Rp = 7;

glui_RCabeza->enable(); // Circunferencia exterior
glui_RCabeza->set_float_val(16);
Rc = 8;

glui_RBase->enable(); // Circunferencia interior
glui_RBase->set_float_val(11.5);
Rb = 5.75;

glui_Angulo->enable(); // Angulo de presin
glui_Angulo->set_float_val(20);
Angulo = 20;

glui_Penetracion->enable(); // Penetracin
glui_Penetracion->set_float_val(0);
Penetracion = 0;

glui_Giro->enable(); // Giro en cada tallada
glui_Giro->set_int_val(1);

E_incremento = 1;

%dem$s en funcin del tipo de simulacin que se reali,a se acti#an los correspondientes
controles gr$ficos. "i la simulacin es normali,ada, el nico campo a habilitar es el
correspondiente al modulo, mientras que las simulaciones eperimentales se acti#an los
correspondientes controles. +ambi.n se recalcula cual es el nue#o #alor de la #ariable Paso.

switch(QueSimula)
{
case SIMU_NORMA_ID:

glui_Modulo->enable(); // Modulo (listbox)
glui_Modulo->set_int_val(0);
Paso = 2 * M_PI * Rp / Z;

break;

case SIMU_TRAPECIO_ID:

glui_Modulo_T->enable(); // Modulo (texto)
glui_Modulo_T->set_float_val(1.0);
Paso = M_PI * glui_Modulo_T->get_float_val();

glui_iso->enable();
glui_radio->set_float_val(0);
ISO_Radio = 0;

glui_depresion->set_float_val(0);
8>
ISO_Depresion = 0;
glui_depresion->disable();

glui_experimental->enable();
glui_Flecha->set_float_val(0);
Flecha = 0;

break;
}


)a constante DATOS_DIENTES_ID indica que se han reali,ado cambios en el nmero de
dientes del engranaje por lo que se procede a actuali,ar el #alor de la #ariable Z al nue#o #alor.

case DATOS_DIENTES_ID:
Z = glui_Dientes->get_int_val();

"e establece un #alor minimo de > dientes para el engranaje. "i el usuario indica un #alor
inferior, se procede a sustituirlo por el minimo.

if (Z < 3) {
glui_Dientes->set_int_val(3);
Z = 3;
}

"i se trata de una simulacin normali,ada es necesario ajustar el resto de los par$metros de
diseo del engranaje, por lo que se recalculan los #alores del radio de paso, el radio eterior, el
radio base

switch(QueSimula)
{
case SIMU_NORMA_ID:
Rp = atof(MODULO[glui_Modulo->get_int_val()]) * Z / 2;
Rc = Rp * (1 + 2 / Z);
Rb = Rp * (1 - 2.5 / Z);

)os nue#os par$metros calculados se escriben el los controles gr$ficos correspondientes

glui_RCabeza->set_float_val(Rc * 2);
glui_RBase->set_float_val(Rb * 2);
glui_RPaso->set_float_val(Rp * 2);

&or ultimo, se calculan la nue#a posicin de la cremallera, la longitud segn el eje A de cada
mo#imiento de la cremallera, que depende de si eiste penetracin o no, y el paso circular del
engranaje.

Origen = - Rc - 2 * (Rc - Rb);
if (Penetracion > 0) {
C_Paso_Y = 2 * (Rc - Rb) / 10;
} else {
C_Paso_Y = (2 * (Rc - Rb) + Penetracion) / 10;
}
Paso = 2 * M_PI * Rp / Z;

break;


86
"i el #alor recibido por la funcin es DATOS_DIAMETRO_PRI_ID indica que se ha reali,ado un
cambio por parte del usuario en el #alor del di$metro primiti#o, por lo que se actuali,a el #alor
del radio de paso al nue#o #alor

case DATOS_DIAMETRO_PRI_ID:
Rp = glui_RPaso->get_float_val() / 2;

"e e#ita que el usuario introdu,ca #alores negati#os para el di$metro, que aunque en lgica
carece de sentido, pudiera darse el caso gener$ndose im$genes que nada tienen que #er con el
simulador.
if (Rp < 0) {
glui_RPaso->set_float_val(0);
Rp = 0;
}

"i la simulacin es normali,ada, es necesario recalcular el resto de los #alores de diseo del
engranaje, reflejar los #alores obtenidos en los controles correspondientes y se recalcula el #alor
del paso para el engranaje est$ndar.

if (QueSimula == SIMU_NORMA_ID) {

Rc = Rp * (1 + 2 / Z);
Rb = Rp * (1 - 2.5 / Z);

glui_Modulo->set_float_val(2 * Rp / Z);
glui_RCabeza->set_float_val(Rc * 2);
glui_RBase->set_float_val(Rb * 2);
Paso = 2 * M_PI * Rp / Z;

}

&or ultimo se reali,an los c$lculos para el nue#o escenario, donde se sita el origen y el #alor
del despla,amiento #ertical de la cremallera.

Origen = -Rc - 2 * (Rc - Rb);
C_Paso_Y = 2 * (Rc - Rb) / 10;

break;


)a modificacin del control correspondiente al #alor del 5odulo #iene dado por la constante
DATOS_MODULO_ID. En el caso de una simulacin normali,ada el control es un listbo por lo
que para obtener su #alor se debe recoger de la #ariable MODULO[] por el !ndice del listbo
seleccionado por el usuario. "i la simulacin no esta normali,ada entonces el #alor del modulo
es el indicado en el tebo. &or lo tanto la lectura del #alor indicado por el usuario se separa
segn el tipo de simulacin que se est$ reali,ando. *na #e, le!da, en el caso normali,ado se
deben recalcular el resto de las #ariables. &or ultimo se refresca la #entana y se sale.

case DATOS_MODULO_ID:

switch(QueSimula) {

case SIMU_NORMA_ID:
Rp = Z / 2 * atof(MODULO[glui_Modulo->get_int_val()]);
Rc = Rp * (1 + 2 / Z);
Rb = Rp * (1 - 2.5 / Z);
85
Paso = 2 * M_PI * Rp / Z;

glui_RPaso->set_float_val(Rp * 2);
glui_RCabeza->set_float_val(Rc * 2);
glui_RBase->set_float_val(Rb * 2);

break;

case SIMU_TRAPECIO_ID:

if (glui_Modulo_T->get_float_val() < 1) {
glui_Modulo_T->set_float_val(1);
}

Paso = M_PI * glui_Modulo_T->get_float_val();

break;
}

Como en los casos que cambian las dimensiones del engranaje se recalcula el nue#o escenario.

Origen = -Rc - 2 * (Rc - Rb);
C_Paso_Y = 2 * (Rc - Rb) / 10;


)a modificacin del #alor del di$metro eterior genera una llamada a la funcin pasando la
constante DATOS_DIAMETRO_EXT_ID, por lo que procede actuali,ar la #ariable Rc que recoge
el radio eterior del engranaje. "e re#isa que el #alor del di$metro no sea negati#o y en el caso
de un perfil est$ndar se #erifica que su #alor no es menor que el correspondiente al di$metro de
paso. &or ultimo se redimensiona el escenario correspondiente a los nue#os #alores.

case DATOS_DIAMETRO_EXT_ID:

Rc = glui_RCabeza->get_float_val() / 2;

if (Rc < 0) {
glui_RCabeza->set_float_val(0);
Rc = 0;
}

if (QueSimula == SIMU_NORMA_ID) {

if (Rc < Rp) {
Rc = Rp;
glui_RCabeza->set_float_val(Rc * 2);
}

Paso = 2 * M_PI * Rp / Z;
}

Origen = -Rc - 2 * (Rc - Rb);
C_Paso_Y = 2 * (Rc - Rb) / 10;

break;


"imilar es el caso de la modificacin del di$metro base del engranaje. 'gualmente, si el radio
base es mayor que el radio de paso se procede a igualarlos.

case DATOS_DIAMETRO_INT_ID:
80

Rb = glui_RBase->get_float_val() / 2;

if (Rb < 0) {
glui_RBase->set_float_val(0);
Rb = 0;
}

if (Rb > Rp) {
Rb = Rp;
glui_RBase->set_float_val(Rb * 2);
}

Origen = -Rc - 2 * (Rc - Rb);
C_Paso_Y = 2 * (Rc - Rb) / 10;
if (QueSimula == SIMU_NORMA_ID) {
Paso = 2 * M_PI * Rp / Z;
}

break;


*na llamada con DATOS_ANGULO_ID indica un cambio en el campo del $ngulo de presin, por
lo que se procede a actuali,ar su #ariable correspondiente.

case DATOS_ANGULO_ID:
Angulo = glui_Angulo->get_float_val();
break;


)a modificacin del #alor de penetracin genera la llamada a la funcin con la etiqueta
DATOS_PENETRACION_ID, por lo que actuali,a el #alor de la #ariable Penetracion y se
procede a recalcular la longitud de los mo#imientos #erticales de la cremallera para cada paso. "i
la penetracin es positi#a se recoge en el diseo de la cremallera separando los dientes de la base
del perfil de cremallera. "i la penetracin es negati#a se procede recortando el recorrido #ertical
de la cremallera. *na #e, actuali,ados las #ariables se refresca la #entana y se sale.

case DATOS_PENETRACION_ID:

Penetracion = glui_Penetracion->get_float_val();
if (Penetracion > 0) {
C_Paso_Y = 2 * (Rc - Rb) / 10;
} else {
C_Paso_Y = (2 * (Rc - Rb) + Penetracion) / 10;
}

break;


"i la llamada a la funcin es porque se ha modificado el #alor del radio de cabe,a
correspondiente a la recomendacin '"- 0>>0, se recha,a que pueda tomar #alores negati#os. )a
depresin lateral solo eiste si la cabe,a esta redondeada, con lo que se habilita o deshabilita en
funcin del #alor del radio de cabe,a. %dem$s este tipo de simulacin no es compatible con la
simulacin con perfil de cremallera circular con lo que se produce a su inhabilitacin o
habilitacin en funcin de si los campos de radio y depresin contienen #alores o son nulos.

case DATOS_ISO_RADIO_ID:

88
ISO_Radio = glui_radio->get_float_val();

if (ISO_Radio < 0) {
glui_radio->set_float_val(0);
ISO_Radio = 0;
}

if (ISO_Radio) {
glui_depresion->enable();
} else {
glui_depresion->disable();
glui_depresion->set_float_val(0);
ISO_Depresion = 0;
}

if ((ISO_Radio == 0) && (ISO_Depresion == 0)) {
glui_circular->enable();
} else {
glui_circular->disable();
}

break;

En el caso de que el par$metro de entrada sea DATOS_ISO_DEPRE_ID lo que ha sucedido es
que el usuario ha modificado el #alor del campo de depresin lateral del diente 3undercut4. Esta
situacin es solo posible si el %ngulo de presin es positi#o, por lo que se procede a comprobarlo
y adem$s no es compatible con la deformacin circular del perfil del diente, con lo que se
procede a habilitar o inhabilitar los controles

case DATOS_ISO_DEPRE_ID:

if ((Angulo > 0) && (Angulo_2 > 0)) {
ISO_Depresion = glui_depresion->get_float_val();
} else {
ISO_Depresion = 0;
glui_depresion->set_float_val(ISO_Depresion);
}

if ((ISO_Radio == 0) && (ISO_Depresion == 0)) {
glui_circular->enable();
} else {
glui_circular->disable();
}

break;


"i el usuario desea hacer una simulacin con perfil del diente de cremallera asim.trico,
introducir$ el #alor del $ngulo de presin para una de las caras del diente, por lo que se
actuali,ar$ su #alor a la #ariable Angulo_2 y como es incompatible este tipo de simulacin con
la deformacin del perfil circular se procede a habilitar o inhabilitar los controles gr$ficos
correspondientes a la simulacin circular.

case DATOS_ANGULO_2_ID:

Angulo_2 = glui_Angulo_2->get_float_val();

if (Angulo != Angulo_2) {
glui_circular->disable();
} else {
8:
glui_circular->enable();
}

break;


"i se modifica el campo de teto correspondiente a la flecha de deformacin circular del perfil
del diente se procede a actuali,ar su #ariable Flecha. "e habilitan los controles
correspondientes a la simulacin '"- 0>>0 y de perfil asim.trico si el #alor es 7 ya que es seal
de que no s. esta reali,ando la simulacin con perfil circular del diente de cremallera.

case DATOS_FLECHA_ID:

Flecha = glui_Flecha->get_float_val();
if (Flecha == 0) {
glui_iso->enable();
glui_asimetrico->enable();
} else {
glui_iso->disable();
glui_asimetrico->disable();
}

break;


Es posible modificar el $ngulo que gira el engranaje entre las mordidas de la cremallera. &or
ello si el usuario cambiase su #alor, el par$metro DATOS_GIRO_ID, se procede a actuali,ar el
#alor de la #ariable E_incremento que es la que guarda su #alor. %dem$s se comprueba que
es un #alor superior a un grado ya que para #alores menores la generacin del engranaje no
suceder!a al no girar y estar la cremallera mordiendo siempre en el mismo sitio. "e descartan
#alores negati#os.

case DATOS_GIRO_ID:

E_incremento = glui_Giro->get_int_val();

if (E_incremento < 1) {
glui_Giro->set_int_val(1);
E_incremento = 1;
}

break;

En el caso de DATOS_ELEMENTOS_ID lo que sucede es que ha cambiado la seleccin dentro
del panel de color del elemento seleccionado, por lo tanto, lo primero es recuperar el !ndice que
indica cual es el nue#o elemento seleccionado y luego proceder a indicar en los spinners de color
el #alor correspondiente que tiene el elemento seleccionado.

case DATOS_ELEMENTOS_ID:
QueObjeto = glui_Elementos->get_int_val();

switch(QueObjeto) {

case FONDO_ID:
glui_Rojo->set_float_val(ColorFondo[0]);
glui_Verde->set_float_val(ColorFondo[1]);
glui_Azul->set_float_val(ColorFondo[2]);
8;
break;

case ENGRANAJE_ID:
glui_Rojo->set_float_val(ColorEngranaje[0]);
glui_Verde->set_float_val(ColorEngranaje[1]);
glui_Azul->set_float_val(ColorEngranaje[2]);
break;

case CREMALLERA_ID:
glui_Rojo->set_float_val(ColorCremallera[0]);
glui_Verde->set_float_val(ColorCremallera[1]);
glui_Azul->set_float_val(ColorCremallera[2]);
break;

case CIRCULO_FONDO_ID:
glui_Rojo->set_float_val(ColorCirFondo[0]);
glui_Verde->set_float_val(ColorCirFondo[1]);
glui_Azul->set_float_val(ColorCirFondo[2]);
break;

case CIRCULO_PASO_ID:
glui_Rojo->set_float_val(ColorCirPaso[0]);
glui_Verde->set_float_val(ColorCirPaso[1]);
glui_Azul->set_float_val(ColorCirPaso[2]);
break;
}

break;

"i lo que cambia es alguno de los spinner de color sealado por los #alores
COMPONENTE_ROJO_ID, COMPONENTE_VERDE_ID o COMPONENTE_AZUL_ID se comprueba
cual es el elemento seleccionado y se le asigna del color nue#o. En el caso del fondo de la
#entana, FONDO_ID, se redibuja mediante las funciones de -pen() glClearColor() y
GlClear().

case COMPONENTE_ROJO_ID:

switch(QueObjeto) {

case FONDO_ID:
ColorFondo[0] = glui_Rojo->get_float_val();
glClearColor (ColorFondo[0], ColorFondo[1], ColorFondo[2],
1);
glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
break;

case ENGRANAJE_ID:
ColorEngranaje[0] = glui_Rojo->get_float_val();
break;

case CREMALLERA_ID:
ColorCremallera[0] = glui_Rojo->get_float_val();
break;

case CIRCULO_FONDO_ID:
ColorCirFondo[0] = glui_Rojo->get_float_val();
break;

case CIRCULO_PASO_ID:
ColorCirPaso[0] = glui_Rojo->get_float_val();
break;
}
:7

break;


&ulsar el botn de <"iguiente NN<, MOVER_ADELANTE_ID, indica que se da un paso hacia
adelante en la simulacin por lo que se procede a asignarle el #alor 1 a la #ariable Movimiento.
En el caso del que el mo#imiento solicitado sea hacia atr$s, MOVER_ATRAS_ID, entonces se le
asigna el #alor I1 a Movimiento.

case MOVER_ADELANTE_ID:
Movimiento = 1;
break;


case MOVER_ATRAS_ID:
Movimiento = -1;
break;


)a etiqueta MODO_SIMULAR_ID se genera con la pulsacin del botn que cambia la forma de
reali,ar la simulacin, entre autom$tica, donde los sucesi#os pasos del tallado los reali,a el
programa, y manual que son reali,ados por el usuario del programa. "i el programa se reali,a de
forma autom$tica, los botones correspondientes de dar instrucciones de mo#imiento hacia
adelante o atr$s se deshabilitan y en caso de que la simulacin sea manual se habilitan. )a
#ariable Stop contiene la informacin sobre el tipo de proceso que se esta reali,ando, si su #alor
es true entonces la simulacin es manual y si su #alor es false entonces se tiene una
simulacin autom$tica. El cambio de forma de simulacin se recoge cambiando el #alor de la
#ariable Stop a su #alor opuesto.

case MODO_SIMULAR_ID:
if (Stop) {
glui_AutoOnOff->set_name(const_cast<char*>("Manual"));
glui_Sig->disable();
glui_Ant->disable();
} else {
glui_AutoOnOff->set_name(const_cast<char*>("Automatico"));
glui_Sig->enable();
glui_Ant->enable();
}
Stop = !Stop;
break;


El ultimo de los #alores que pueden entrar a la funcin es SALIR_ID correspondiente a la
pulsacin del usuario sobre el botn "alir, por lo que se reinician las #ariables llamando a
v_glui_control(CLEAR_ID), como si se hubiese pulsado el botn de reiniciar, a fin de e#itar
que la seleccin por parte del usuario de la simulacin se realice con otros #alores diferentes de
los iniciales. )uego se oculta la #entana ()*+ donde se reali,a la simulacin. "e destruye la
sub#entana ()*' v_glui y se muestra la #entana ()*' glui inicial del programa.

case SALIR_ID:
v_glui_control(CLEAR_ID);
glutHideWindow();
v_glui->close();
glui->show();
:1
break;


&or ultimo y sea cual sea el #alor del par$metro de la funcin se procede a reali,ar una serie de
c$lculos a fin de establecer los #alores m$imos admisibles para el radio de cabe,a y para la
depresin lateral del diente.

if (Angulo > Angulo_2) {
tpAngulo = Angulo * M_PI / 180;
} else {
tpAngulo = Angulo_2 * M_PI / 180;
}

tpLimite = (Paso * cos(tpAngulo) -
2 * (Rc - Rb) * sin(tpAngulo)) / (4 * (1 - sin(tpAngulo)));

if (tpLimite < 0) {
tpLimite = 0;
}

if (ISO_Radio > tpLimite) {
ISO_Radio = tpLimite;
glui_radio->set_float_val(ISO_Radio);
}

if (tpAngulo <= 0) {
tpLimite = 0;
} else {
tpLimite = (Rc - Rb) * sin(tpAngulo) + ISO_Radio * (1 - sin(tpAngulo) -
cos(tpAngulo));
}
if (ISO_Depresion > tpLimite) {
ISO_Depresion = tpLimite;
glui_depresion->set_float_val(ISO_Depresion);
}


)o ltimo es refrescar los #alores y redibujar el nue#o escenario.

v_glui->sync_live();
glutPostRedisplay();


Esta es la forma en la que esta funcin responde a los e#entos generados por los controles
gr$ficos de la #entana de simulacin, reajustando las #ariables correspondientes y actuali,ando
sus #alores en los controles gr$ficos.


5.1.5. 2uncin idle3 4

Esta es una funcin de rellamada que se genera cuando no hay otra acti#idad pendiente y se
utili,a para pro#ocar cambios que son utili,ados para generar la siguiente escena. =e esta forma
se genera la animacin en la #entana.

Gepasamos las modificaciones que son reali,adas en las #ariables de nuestro programa antes
de renderi,ar la siguiente escena.

:9
En primer lugar se crea una #ariable local C_Xx, que ser$ usada para saber el despla,amiento
segn el eje J de la cremallera para cada giro reali,ado por el engranaje. +ambi.n se crea otra
#ariable, C_Contador_X, para medir el despla,amiento hori,ontal 3eje J4 de la cremallera
cuando no esta tallando.

static float C_Xx;
static int C_Contador_X;

"i se trata de una simulacin autom$tica o el #alor de Movimiento es 1, entonces se reali,a un
paso hacia adelante en la simulacin. &ara ello se reali,a el cdigo comprendido entre { }

if (!Stop || (Movimiento == 1)) {

CDue tipo de mo#imiento esta haciendo la cremalleraE "e utili,a un switch( ) para separar el
cdigo a ejecutar segn cual sea el #alor de la #ariable C_Mueve que indica el mo#imiento de la
cremallera

switch (C_Mueve) {

"i el mo#imiento que hace la cremallera es hacia arriba segn el eje A, se comprueba si el
#alor de la #ariable C_Contador es menor que 17. Esto se hace porque el trayecto #ertical de la
cremallera desde su posicin original m$s baja hasta su posicin #ertical m$s alta se di#ide en 17
pasos, por lo que si el mo#imiento de la cremallera es hacia arriba y no ha llegado a 17 tiene que
seguir subiendo.

case SUBIR_ID:
if (C_Contador < 10) {

"e comprueba si es el primer mo#imiento que se reali,a de la simulacin. "i la #ariable
Primera_Vez es true entonces la cremallera se encuentra en el primer tramo #ertical, y
corresponde reali,ar una serie de operaciones, como deshabilitar los controles de entrada de
datos, ya que de no ser as! el usuario podr!a modificar datos de diseo durante el proceso
falseando la simulacin.

if (Primera_Vez) {

)a posicin de la cremallera segn el eje A 3C_Desplaza4 se incrementa en la longitud del
despla,amiento #ertical de un mo#imiento. )a #ariable C_Desplaza se usar$ para indicar la
posicin segn el eje A de las cremalleras ocultas que suponen el recorte del perfil del engranaje.

C_Desplaza += C_Paso_Y;

"i es el primer mo#imiento se procede a deshabilitar los controles gr$ficos de entrada de datos

if (C_Contador == 0) {

"i el proceso de simulacin es manual entonces se habilita para el uso el botn de dar un paso
hacia atr$s. En caso de ser un proceso autom$tico, no es necesario .ste botn por lo que se deja
deshabilitado.

:>
if (Stop) {
glui_Ant->enable();
}

"e procede a deshabilitar la entrada de datos a tra#.s de los controles gr$ficos, dej$ndolos
nicamente para ser le!dos.

glui_Dientes->disable();
glui_RPaso->disable();
glui_RCabeza->disable();
glui_RBase->disable();
glui_Angulo->disable();
glui_Giro->disable();
glui_Penetracion->disable();
glui_Giro->disable();

"egn la simulacin sea normali,ada o no, se deshabilitan los controles espec!ficos de cada
simulacin, la listbo del modulo en simulacin normali,adaP y los tetbo de la simulacin
trape,oidal no normali,ada correspondientes al modulo y la flecha de deformacin del diente.

switch(QueSimula) {
case SIMU_NORMA_ID:
glui_Modulo->disable();
break;
case SIMU_TRAPECIO_ID:
glui_Modulo_T->disable();
glui_Flecha->disable();
break;
}
}
}

% la #ariable que guarda la posicin de la cremallera segn el eje A se incrementa en el #alor
del despla,amiento #ertical de la cremallera y el contador de pasos dados en la direccin del eje
A 3C_Contador4 se incrementa en una unidad. &or ultimo, habiendo dado un paso hacia
adelante en la simulacin, la #ariable Movimiento se igual a 7.

C_Y += C_Paso_Y;
C_Contador ++;
Movimiento = 0;
}


"i por el contrario, C_Contador #ale 17 es que esta en el punto mas alto de su recorrido, por
lo que a partir de este momento la cremallera se mo#er$ hacia la derecha 3sentido positi#o del eje
J4.

else {
C_Mueve = DERECHA_ID;

)a tallada est$ reali,ada, con lo que para la prima tallada, el engranaje girar$ el $ngulo
indicado 3E_incremento4, y la cremallera se despla,ar$ en el sentido creciente del eje J una
longitud dada por el producto del radio de paso por el seno del $ngulo girado.

C_Xx = Rp * sin(E_incremento * M_PI / 180);

:6
"e guarda la ultima posicin segn el eje J de la cremallera en C_Ultimo_X y se cambia el
#alor de Primera_Vez a false ya que se ha terminado el primer recorrido #ertical de la
cremallera.

C_Ultimo_X = C_X;
Primera_Vez = false;
}
break;

"i el mo#imiento de la cremallera es en el sentido creciente del eje J, hacia la derecha en la
pantalla.

case DERECHA_ID:

"i la posicin de la cremallera es menor que el paso se sigue con el proceso de talla y se reali,a
otro mo#imiento de la cremallera hacia la derecha

if (C_X < Paso) {

El $ngulo girado que indica la posicin del engranaje se incrementa en el #alor del $ngulo de
paso

E_angulo += E_incremento;

)a posicin de la cremallera se despla,a en el sentido del eje J el #alor correspondiente al
$ngulo girado por el engranaje.

C_X += C_Xx;

"e guarda en el #ector de posiciones histricas la posicin de la cremallera y se incrementa el
contador de mo#imientos del engranaje

C_Historia_X[Conta_h] = C_X;
Conta_h ++;

"e pone la #ariable indicadora de dar un mo#imiento adelante a 7. "e comprueba si el
engranaje ha dado una #uelta completa, lo que significa que ya esta tallado, y de ser as! se
cambia el mo#imiento de la cremallera a bajar.

Movimiento = 0;
if (E_angulo > 360) {
C_Mueve = BAJAR_ID;
}

En el caso de que la posicin de la cremallera es igual o mayor que el paso se procede a bajar
la cremallera y hacerla retroceder, hacia la i,quierda, una longitud de dos pasos circulares para
#ol#erla a colocar en posicin de tallar el engranaje.

} else {

:5
"e incrementa el nmero de dientes en 9 unidades. "i el nmero de dientes tallados en el
engranaje es menor que el nmero de dientes a tallar mas uno, entonces se reinician las #ariables
para el retroceso de la cremallera

Diente += 2;
if (Diente < Z+1) {
C_Xx = Paso / 10;
C_Contador_X = 20;
}

)os dientes del engranaje est$n tallados, por lo que se pone la bandera de mo#imiento en bajar.

C_Mueve = BAJAR_ID;
}
break;

El mo#imiento de la cremallera es hacia abajo. "e comprueba el #alor de C_Contador ya que
en el proceso de bajada de la cremallera se deben dar los 17 pasos que se dieron en el proceso de
subida. "i la posicin es positi#a significa que no se ha alcan,ado el punto mas bajo de la
cremallera

case BAJAR_ID:
if (C_Contador > 0) {

)a posicin de la cremallera disminuye en el #alor del paso #ertical, el contador C_Contador
de la posicin #ertical de la cremallera respecto a su posicin original segn el eje A se
disminuye en una unidad y la #ariable Movimiento se iguala a 7 ya que el mo#imiento
siguiente ya se ha reali,ado.

C_Y -= C_Paso_Y;
C_Contador --;
Movimiento = 0;
}

Cuando la cremallera ha llegado a su posicin m$s baja de su mo#imiento

else {

se comprueba si el $ngulo girado por el engranaje supera los >07F, lo que significar!a que se ha
terminado el proceso de tallado, con lo que se deshabilitar!a el control del botn <"iguiente< y la
#ariable C_Mueve se etiqueta con FIN_ID 3final de la simulacin4. En caso contrario, se indica
mediante la #ariable C_Mueve que la cremallera debe mo#erse hacia la i,quierda

if (E_angulo >= 360) {
glui_Sig->disable();
C_Mueve = FIN_ID;
} else {
C_Mueve = IZQUIERDA_ID;
}
}
break;

El mo#imiento es hacia la i,quierda. "e comprueba el contador de mo#imientos a reali,ar por
la cremallera en la direccin del eje J, mo#imiento hori,ontal, si es mayor que cero
:0

case IZQUIERDA_ID:
if (C_Contador_X > 0) {

)a posicin de la cremallera segn el eje J se disminuye en la longitud sealada por la
#ariable C_Xx, se indica que el mo#imiento hacia adelante se ha reali,ado poniendo la #ariable
Movimiento a cero y se disminuye en 1 el #alor del contador de mo#imientos segn el eje J de
la cremallera

C_X -= C_Xx;
Movimiento = 0;
C_Contador_X --;
}

El contador de mo#imientos C_Contador_X es cero, con lo que la cremallera ha llegado a su
posicin mas a la i,quierda. Quel#e a repetir el ciclo inicial de subir, por lo que la #ariable de
mo#imiento C_Mueve recoge el #alor SUBIR_ID.

else {
C_Mueve = SUBIR_ID;
}
break;

"i la etiqueta recibida indica el fin del mo#imiento, por haberse llegado al final, entonces la
simulacin autom$tica ha terminado y se pasa a manual, cambiando el #alor de la #ariable Stop
y configurando el botn para que al pulsarse funcione la simulacin autom$tica, pero se deja
deshabilitado. &or otra parte se habilita el botn que permite hacer un paso hacia atr$s en la
simulacin de forma manual.

case FIN_ID:
Stop = true;
glui_AutoOnOff->set_name(const_cast<char*>("Automatico"));
glui_AutoOnOff->disable();
glui_Ant->enable();

"e indica a la #ariable de mo#imiento C_Mueve que se est$ en la ltima posicin de la
simulacin y el indicador de mo#imiento, Movimiento, se iguala a cero.

C_Mueve = OFF_ID;
Movimiento = 0;
break;

Con esto termina el bloque a reali,ar, en el caso de que el proceso sea autom$tico o que siendo
manual la #ariable Movimiento tenga #alor uno, o lo que es lo mismo, todo lo que se debe
hacer para dar un paso hacia adelante en la simulacin.

"i lo que se trata es de dar un paso atr$s en la simulacin, entonces esto estar$ indicado en el
#alor de la #ariable Movimiento que ser$ I1.

if (Movimiento == -1) {

:8
)o que hay que reali,ar en el mo#imiento hacia atr$s depende del #alor de la #ariable
C_Mueve que indica que tipo de mo#imiento que esta reali,ando la cremallera, por lo que se
utili,a un switch(C_Mueve) para separar el cdigo a reali,ar en funcin de su #alor

switch (C_Mueve) {

&rimer caso, la cremallera esta en posicin de subir

case SUBIR_ID:

"e comprueba si esta en la posicin mas baja del mo#imiento #ertical. =e no estarlo, ya que la
#ariable C_Contador es positi#a...

if (C_Contador > 0) {

"e #e si el mo#imiento de subida de la cremallera corresponde a la primera #e, que sube y de
ser as! su despla,amiento se disminuye en el #alor del paso #ertical de la cremallera C_Paso_Y

if (Primera_Vez) {
C_Desplaza -= C_Paso_Y;
}

)a posicin de la cremallera segn el eje A se disminuye en la longitud del mo#imiento
#ertical C_Paso_Y, se disminuye el contador de mo#imientos de la cremallera y la #ariable
Movimiento se iguala a cero para indicar que el mo#imiento hacia atr$s ya se ha reali,ado.

C_Y -= C_Paso_Y;
C_Contador --;
Movimiento = 0;

CDue pasa si la cremallera llega al origen de salidaE &ues eso se determina comprobando que el
contador de mo#imientos de la Cremallera C_Contador es cero y adem$s la #ariable
Primera_Vez es true, por lo que de ser cierta esta situacin se procede a deshabilitar el botn
de dar pasos hacia atr$s en el mo#imiento manual.

if ((C_Contador == 0) && Primera_Vez) {
glui_Ant->disable();
}
}

En el caso de que la #ariable C_Contador #alga 7, o lo que es lo mismo la cremallera esta en
el punto mas bajo de su mo#imiento #ertical entonces el indicador de mo#imiento se cambia a
IZQUIERDA_ID que es la ,ona en la que la cremallera se mue#e de derecha a i,quierda en la
simulacin. )a longitud de los mo#imientos hori,ontales se hace igual al 17R del paso circular
del engranaje. +ambi.n se guarda la posicin en el eje J de la cremallera en la #ariable
C_Ultimo_X y por ultimo, se iniciali,a la #ariable C_Contador_X a 7 correspondiente a la
posicin mas a la i,quierda del mo#imiento de la cremallera.

else {
C_Mueve = IZQUIERDA_ID;
C_Xx = Paso / 10;

::
C_Ultimo_X = C_X;
C_Contador_X = 0;
}
break;

"i el mo#imiento que se reali,a es hacia la i,quierda se reali,an dos comprobaciones. En
primer lugar se comprueba si el C_Contador_X es menor que 97, con lo que no esta en la
posicin etrema i,quierda del mo#imiento de la cremallera. En segundo lugar se comprueba si
es la Primera_Vez 3la cremallera esta reali,ando su primera ascensin4 y en este caso el
C_Contador_X es menor que 17 ya que la cremallera solo ha reali,ado un recorrido hori,ontal
de 1 &aso. En cualquiera de los dos casos: )a posicin de la cremallera se incrementa en X_Xx la
longitud del mo#imiento de la cremallera sobre el eje J 3consiguiendo un mo#imiento de la
cremallera en el sentido positi#o del eje J, o lo que es lo mismo, un mo#imiento de la cremallera
hacia la derecha4P se incrementa el contador de las posiciones de la cremallera sobre el eje J,
C_Contador_X, y la #ariable Movimimiento se iguala a cero, ya que el mo#imiento hacia
atr$s ya se ha reali,ado

case IZQUIERDA_ID:
if ((C_Contador_X < 20) || (Primera_Vez && C_Contador_X < 10)) {
C_X += C_Xx;
C_Contador_X ++;
Movimiento = 0;
}

En caso contrario se entiende que se ha llegado a la posicin mas a la derecha en el
mo#imiento de la cremallera, con lo que se procede a cambiar la #ariable de mo#imiento a la
bandera que indica la ,ona de bajada de la cremallera.

else {
C_Mueve = BAJAR_ID;
}
break;

"i el sentido del mo#imiento de la cremallera es de bajar tambi.n es necesario saber en que
posicin del mo#imiento #ertical se encuentra y para ello se eamina el #alor de la #ariable
C_Contador

case BAJAR_ID:

5ientras el mo#imiento est. en la #ertical por encima de su #alor mas bajo

if (C_Contador < 10) {
C_Y += C_Paso_Y;
C_Contador ++;
Movimiento = 0;
}

En caso de que no sea as!, y se encuentre en el #alor mas bajo de C_Contador, entonces se
asigna a la #ariable C_Mueve el #alor DERECHA_ID para indicar que el mo#imiento de la
cremallera se encuentra en la ,ona en la que se mue#e hacia la derecha en la simulacin y se
calcula cuanto se debe despla,ar la cremallera lateralmente, en el sentido del eje J, por cada giro
del engranaje y se guarda su #alor en C_Xx.

:;
else {
C_Mueve = DERECHA_ID;
C_Xx = Rp * sin(E_incremento * M_PI / 180);
}
break;

)a etiqueta indica que el mo#imiento se est$ reali,ando hacia la derecha, sentido creciente del
eje J, por lo que si se trata de un mo#imiento hacia atr$s implica un mo#imiento hacia la
i,quierda. "e hace necesario comprobar si se ha llegado al etremo i,quierdo del mo#imiento de
la cremallera, por lo que se comprueba si la posicin de la cremallera C_X es superior a
C_Ultimo_X 3ultima posicin de la cremallera segn el eje , antes del cambio de sentido4 y si
el engranaje est$ girado de su posicion inicial, indicado por un #alor positi#o de E_angulo, de
ser cierta esta situacin

case DERECHA_ID:
if ((C_X > C_Ultimo_X) && (E_angulo > 0)) {

El $ngulo de giro del engranaje se disminuye en el #alor del $ngulo de giro por tallada de la
simulacin. )a posicin de la cremallera con respecto al eje J disminuye en el #alor de la
longitud de cada paso. El #ector que guarda la posicin de la cremallera en funcin del
mo#imiento efectuado se borra igual$ndolo a cero y se disminuye el contador de mo#imientos

E_angulo -= E_incremento;
C_X -= C_Xx;
C_Historia_X[Conta_h] = 0;
Conta_h --;

En caso de llegar a la primera posicin del contador de mo#imientos nos encontramos en el
primer ciclo de tallado del engranaje, por lo que la #ariable Primera_Vez debe ser acti#ada

if (Conta_h == 1) {
Primera_Vez = true;
}

El mo#imiento hacia atr$s se ha reali,ado y se anula el #alor de la #ariable Movimiento

Movimiento = 0;
}

%l no ser cierta la situacin anterior nos encontramos en el etremo i,quierdo del mo#imiento
de la cremallera por lo que se procede a indicar que se entra en el tramo de mo#imiento de la
cremallera #ertical cambiando la #ariable C_Mueve

else {
C_Mueve = SUBIR_ID;
}
break;

)a cremallera esta en la ultima posicin de la simulacin. %l pulsar el botn para ejecutar un
mo#imiento hacia atr$s se habilita el botn de <5anualO%utom$tico< ya que es posible
seleccionar por parte del usuario el tipo de simulacin a reali,ar, tambi.n se habilita el botn
<"iguiente< ya que eiste un paso hacia adelante en la simulacin. )a #ariable de mo#imiento
cambia su #alor a BAJAR_ID y la cremallera se posiciona, mediante la #ariable C_Y en el
;7
incremento de la longitud del mo#imiento #ertical. El contador de mo#imientos de la cremallera
se incrementa en una unidad y se anula el #alor de la #ariable Movimiento ya que se ha
reali,ado el paso hacia atr$s.

case OFF_ID:
glui_AutoOnOff->enable();
glui_Sig->enable();
C_Mueve = BAJAR_ID;
C_Y += C_Paso_Y;
C_Contador ++;
Movimiento = 0;
break;

Cualquier otra situacin que no sea la simulacin autom$tica o en el caso de la simulacin
manual una orden de ir hacia adelante 3Movimiento S 14 o hacia atr$s 3Movimiento S I14 no
pro#oca ningn cambio en la situacin del simulador, por lo que la escena generada, en la
#entana es id.ntica.



5.1.0. 2uncin main=isplay3 4

Esta funcin es la encargada de actuali,ar la #entana gr$fica donde se renderi,a la escena. Es el
motor del programa y es la encargada de reali,ar la escena, por lo que lee las #ariables de estado
y en funcin de sus #alores reali,a la escena.

"e iniciali,a una #ariable llamada inicio con la hora dada por el sistema operati#o del
ordenador.

long inicio = clock();

A en primer lugar procede a la limpie,a de lo que hubiese en la #entana.

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

"e selecciona la matri, de &royeccin, encargada de definir el #olumen de trabajo y se procede
a iniciali,arla cargando la matri, identidad.

glMatrixMode(GL_PROJECTION);
glLoadIdentity();

"e disea la #ista de la #entana como ortogonal indicando las coordenadas segn el eje J
i,quierda, el eje J derecha, eje A inferior, el eje A superior, y las dos coordenadas K, que
establecen el #olumen a #er en la #entana. =ado que la simulacin se reali,a en el plano K S 7 se
escoge como #olumen a #er del eje K el eistente entre las coordenadas I1 y 1.

glOrtho(1.4 * Origen - trans[0] - trans[2],
-1.4 * Origen - trans[0] + trans[2],
1.4 * Origen - trans[1] - trans[2],
-1.4 * Origen - trans[1] + trans[2],
1, -1);

;1
*na #e, establecido el espacio a #isionar se procede a seleccionar la matri, del 5odelador, que
es la encargada de mo#er los objetos por la escena. )o primero a reali,ar es iniciali,ar dicha
matri, con la matri, identidad.

glMatrixMode(GL_MODELVIEW);
glLoadIdentity();

*na #e, iniciali,ado el sistema de 5odelado, se dibuja el cilindro correspondiente al engranaje
base, indicando el radio de la circunferencia eterior y un #ector, ColorEngranaje, de tres
elementos que contiene la informacin correspondiente al color deseado para el engranaje.

Cilindro(Rc, ColorEngranaje);

=espu.s se dibujan las circunferencias primiti#a y de fondo si esta indicado como #isibles en
las #ariables C_Paso_ON y C_Fondo_ON, llamando a la funcin Circunferencia() pas$ndoles
como par$metros sus respecti#os radios y #ectores de color.

if (C_Paso_ON) {
Circunferencia(Rp, ColorCirPaso);
}

if (C_Fondo_ON) {
Circunferencia(Rb, ColorCirFondo);
}

CComo se simula en el engranaje los tallados reali,ados por la cremalleraE )a respuesta a esta
pregunta esta en el algoritmo usado para esta simulacin. =ado que se esta trabajando en un
plano, si al engranaje se superpone el perfil de la cremallera con el mismo color que el fondo de
la #entana se produce el efecto ptico de que el engranaje ha quedado recortado por la
cremallera. &or lo tanto el efecto de la simulacin en el engranaje se logra superponiendo al
cilindro del engranaje base tantos perfiles de cremallera como recortes de la cremallera se han
reali,ado, con el mismo color que el fondo de la #entana.

"e iniciali,a el #ector de datos

C_Datos[0] = 0.0; // X del centro de la cremallera
C_Datos[1] = 0.0; // Y del centro de la cremallera
C_Datos[2] = 0.0; // angulo girado en el sentido de eje z
C_Datos[3] = Rc - Rb; // Altura del diente
C_Datos[4] = Paso; // Paso circular
C_Datos[5] = Angulo; // Angulo de presion

"i se trata de una simulacin '"- 0>>0 entonces se hace necesario incluir en el #ector
C_Datos[] los #alores correspondientes a las #ariables ISO_Radio e ISO_Depresion en caso
contrario estos campos se anulan igual$ndolos a 7.

if (C_ISO) {
C_Datos[7] = ISO_Radio;
C_Datos[8] = ISO_Depresion;
} else {
C_Datos[7] = 0;
C_Datos[8] = 0;
}

;9
En el #ector de definicin de la cremallera C_Datos[] se indica, en el caso, de que la
cremallera sea asim.trica, el #alor del segundo $ngulo de presin, en caso contrario, su #alor es
coincidente con el $ngulo de presin definido para el engranaje.

if (C_Asimetria) {
C_Datos[10] = Angulo_2;
} else {
C_Datos[10] = Angulo;
}

"i eiste penetracin de la cremallera en el engranaje tambi.n se indica en el #ector de datos,
C_Datos[]

float avance;
if (Penetracion > 0) {
C_Datos[6] = Penetracion;
avance = Rc;
} else {
C_Datos[6] = 0;
avance = Rc - Penetracion;
}

&ara dibujar las cremalleras mordidas en el engranaje se iniciali,an las #ariables auiliares que
se usan

float mma = E_angulo;
int cuenta_angulo = 0;
int mmax = 0;

"e inicia un bucle que se reali,ar$ mientras la #ariable mma tenga un #alor positi#o

while (mma > 0)

"e calcula la coordenada x e y del centro de la cremallera as! como el $ngulo que esta girado.

C_Datos[0] = avance * sin(mma * M_PI / 180) +
C_Historia_X[cuenta_angulo] * cos(mma * M_PI / 180);
C_Datos[1] = Origen + C_Desplaza +
avance * (1 - cos(mma * M_PI / 180)) +
C_Historia_X[cuenta_angulo] * sin(mma * M_PI /180);
C_Datos[2] = mma;

*na #e, que se tienen los #alores donde se coloca la cremallera se llama a la funcin
Cremallera() pas$ndole como par$metros el color, que se corresponde con el color de fondo, y
los datos constructi#os de la cremallera definidos en el #ector C_Datos[]

Cremallera(ColorFondo, C_Datos);

*na #e, dibujado el perfil de la cremallera se actuali,a la #ariable mma disminuy.ndola en el
#alor de E_incremento e incrementando el #alor de cuenta_angulo en una unidad.

mma -= E_incremento;
cuenta_angulo ++;

;>
repitiendo el dibujo de otro perfil de cremallera con los nue#os #alores, hasta que el #alor de mma
deje de ser mayor que 7.

&or ultimo procede el dibujo de la cremallera #isible, iniciali,ando el #ector de datos y pasarlo
en la llamada a la funcin Cremallera()

C_Datos[0] = C_X;
C_Datos[1] = C_Y + Origen;
C_Datos[2] = 0;
Cremallera(ColorCremallera, C_Datos);

*na #e, que se ha terminado el diseo se procede a indicar al sistema que la #entana debe ser
refrescada y proceder al intercambio de buffers acti#ando como #isible el que se ha estado
dibujando y marcando como oculto el mostrado en pantalla y que ser$ utili,ado por -pen()
para dibujar la siguiente escena. &or ultimo una #e, que se ha terminado el diseo se procede a
indicar al sistema que la #entana debe ser refrescada y proceder al intercambio de buffers
acti#ando como #isible el que se ha estado dibujando y marcando como oculto el mostrado en
pantalla y que ser$ utili,ado por -pen() para dibujar la siguiente escena.

if (glutGetWindow() != winIdMain) {
glutSetWindow(winIdMain);
}
glutPostRedisplay();
glutSwapBuffers ();

)o ultimo que hace la funcin, es incluir un tempori,ador. % medida que la simulacin a#an,a,
el renderi,ado se hace algo m$s complejo, lo que hace que en ordenadores r$pidos, las primeras
secuencias sean muy r$pidas y las ultimas muy lentas. &ara minimi,ar este efecto se construye el
tempori,ador que lo nico que hace es detener el proceso si el tiempo transcurrido desde el inicio
de la funcin hasta el momento presente es inferior a 07 milisegundos.

do {
fin = clock();
} while (difftime(fin, inicio) < 60);



5.". m#canimo.cpp

El diseo de los objetos que componen el escenario se ha separado en un fichero fuente
separado Tmecanismos.cppU a fin de facilitar su rediseo. =entro de este fichero est$n las
funciones que dibujan el engranaje base, las circunferencias y la cremallera.


5.9.1. 2uncin Cilindro3 4

Esta funcin es la encargada de dibujar el cilindro base del engranaje, pas$ndole dos
par$metros, el radio R y las tres componentes G(H del color.

void Cilindro (float R, float *color)

;6
)a )ibrer!a de *tilidades de -pen() 3()*4 soporta el dibujo de formas tridimensionales
simples como son los conos, discos y esferas. *tili,aremos para el diseo del engranaje un disco.
&ara ello indicamos que la #ariable Base apunta a un objeto de tipo cu$drica.

GLUquadricObj *Base;
Base = gluNewQuadric();

"e indica el color para el disco y se llama a la funcin gluDisk() que dibuja un disco
perpendicular al eje K.

glColor3f(color[0], color[1], color[2]);
gluDisk(Base, 0 , R, 60, 2);

pas$ndole cinco #ariables, la primera de ellas indica el objeto que contiene la informacin de
estado cu$drico para usar en la generacin del disco. )a segunda #ariable es el radio interior del
disco, siendo 7 el #alor correspondiente a un disco slido y cualquier otro #alor para construir
una arandela. El tercer #alor es el radio eterior del disco y el ltimo es el nmero de caras del
disco.


5.9.9. 2uncin Circunferencia3 4

Es la encargada de dibujar una circunferencia, pas$ndole como #ariables el radio G de la
circunferencia y el color. )a circunferencia se dibuja como un pol!gono de puntos donde la
posicin de cada punto es determinada por la proyeccin ortogr$fica del radio, gir$ndolo un
$ngulo determinado por el cociente entre >07F y el nmero de puntos a dibujar.

"e indica el nmero de puntos que se desean para construir la circunferencia

int numero_puntos = 300;

"e crea una #ariable para el #alor del $ngulo girado del radio y se indica el color que tiene la
circunferencia:

float angulo;
glColor3f(color[0], color[1], color[2]);

"e empie,a la construccin de la circunferencia indicando que se trata de un grupo de #.rtices,
donde GL_LINE_LOOP indica que los #.rtices se usan para crear l!neas que los unen, donde cada
#.rtice nue#o es unido al anterior mediante una l!nea, uniendo .l ultimo de los #.rtices al
primero.

glBegin(GL_LINE_LOOP);

para cada uno de los puntos se calcula el #alor del $ngulo y se dibuja un #.rtice indic$ndole las
coordenadas J e A del mismo.

for (int i = 0; i < numero_puntos; i++)
{
angulo = 2 * M_PI * i / numero_puntos;
glVertex2f(R * cos(angulo), R * sin(angulo));
;5
}

"e termina la construccin de la circunferencia:

glEnd();


5.9.>. 2uncin Cremallera3 4

Esta funcin es la encargada del diseo de la cremallera, dando forma a la misma segn los
par$metros pasados. Esta funcin dibuja b$sicamente una cremallera compuesta de cinco dientes
y luego la base.

&ara la construccin de la cremallera en primer lugar se crean unas #ariables locales que
contienen el #alor de los $ngulos de presin en radianes.

float angulo = dato[5] * M_PI / 180;
float angulo_2 = dato[10] * M_PI / 180;

)uego se guardan los #alores de la matri, de #isuali,acin y se inicia el dibujado de la
cremallera indicando el color de la misma, mediante sus componentes G(H.

glPushMatrix();

glColor3f(color[0], color[1], color[2]);

El sistema de referencia del objeto a construir es despla,ado mediante la funcin
glTranslatef(despla,amiento eje J, despla,amiento eje A, despla,amiento eje J) y luego se
reali,a un giro mediante la funcin glRotatef($ngulo, componente J, componente A,
componente K). )a cremallera se construye en el plano K que se maneja por lo que sus
despla,amientos solo se producen en el sentido del eje J, dato[0], el sentido del eje A,
dato[1], y los giros se reali,an siempre en la direccin del eje K, segn el #alor indicado por
dato[2].

glTranslatef((GLfloat) dato[0], (GLfloat) dato[1], 0);
glRotatef((GLfloat) dato[2], 0, 0, 1);


El diseo grafico de cada diente de la cremallera se crea en funcin de los par$metros de
entrada dada por el #ector dato[]. &ara ello se utili,a una combinacin de selectores que decide
el tipo de la forma siguiente:

if (dato[9]) {

"e crea un perfil de diente deformado circularmente con una flecha de
deformacin dada por el #alor de dato[9]

} else {
if (dato[7]) {
if (dato[8]) {

;0
"e crea un perfil segn la recomendacin '"- 0>>0 donde el radio de cabe,a
#iene dado por dato[7] y la depresin lateral o undercut por dato[8].

} else {

"e crea un perfil de diente recomendado por '"- 0>>0 con redondeo de cabe,a
dado por dato[7] y sin depresin lateral.

}

} else {

"e crea un perfil de diente est$ndar.
}

}

*na #e, dibujados los dientes de la cremallera, si eiste penetracin, los dientes quedan
despla,ados con respecto a la base de la cremallera, por lo que se procede a aadirles una base de
forma poligonal indicando sus cuatro coordenadas.

if (dato[6] > 0) {

for (int i = -2; i < 3; i++) {

glBegin(GL_POLYGON);
glVertex2f(
-dato[4] / 4 - dato[3] / 2 * tan(angulo) -
dato[6] * tan(angulo) + dato[8] / cos(angulo) + i * dato[4],
0
);
glVertex2f(
-dato[4] / 4 - dato[3] / 2 * tan(angulo) +
dato[8] / cos(angulo) + i * dato[4],
dato[6]
);
glVertex2f(
dato[4] / 4 + dato[3] / 2 * tan(angulo_2) -
dato[8] / cos(angulo_2) + i * dato[4],
dato[6]
);
glVertex2f(
dato[4] / 4 + dato[3] / 2 * tan(angulo_2) +
dato[6] * tan(angulo_2) -
dato[8] / cos(angulo_2) + i * dato[4],
0
);
glEnd();

}

}

*na #e, dibujados los dientes, se procede al dibujado del eje de rotacin indicando que se trata
de un pol!gono de cuatro lados, GL_QUADS, y se indican sus cuatro #.rtices.

glBegin(GL_QUADS);
glVertex2f(- 3 * dato[4], 0);
glVertex2f(3 * dato[4], 0);
;8
glVertex2f(3 * dato[4], - dato[3] / 2);
glVertex2f(- 3 * dato[4], - dato[3] / 2);
glEnd();

)a construccin de la cremallera termina coloc$ndola en su posicin en el dibujo de la
simulacin y para ello se recupera la matri, de #isuali,acin que pre#iamente hab!a sido
guardada.

glPopMatrix();


*na #e, #isto el mecanismo de construccin de la cremallera #eamos en detalle la
construccin de cada perfil de diente.

El di#nt# #t$nda% se crea mediante la construccin de un pol!gono de cuatro #.rtices. "u
construccin #iene dada por las instrucciones que determinan el principio y el final de la figura.

glBegin(GL_POLYGON);

glEnd();

En su interior se definen los #.rtices que componen el pol!gono, dando como par$metros las
coordenadas J e A del punto.

glVertex2f(
-dato[4] / 4 - dato[3] / 2 * tan(angulo) + i * dato[4],
dato[6]
);

El proceso de creacin del resto de los dientes es similar, indicando en cada caso las
coordenadas de los #.rtices que forman parte de cada pol!gono.


98
BIBLIOGRAFA


- Richard S. Wright JR y Michael Sweet, Programacin en Open!",
#$%&%O'#S ('()( M*!+%M#$%( S(, Madrid, ,99-.

- Open!, +he Open! Re.erence Man/al - +he 0l/e1oo2",
http344www.opengl.org4doc/mentation41l/e51oo24

- Open!, +he Open! Programming /ide - +he Red1oo2",
http344www.opengl.org4doc/mentation4red51oo24

- Open!, +he Open! *tility +ool2it",
http344www.opengl.org4re6o/rce64li1rarie64gl/t4

- Mar2 J. 7ilgard, +he Open! *tility +ool2it 8!*+9. Programming %nter.ace.
(P% :er6ion ;",
http344www.opengl.org4doc/mentation46pec64gl/t46pec;46pec;.html

- Pa/l Rademacher, !*%. *6er %nter.ace !i1rary",
http344gl/i.6o/rce.orge.net4

- Jo6eph #dward Shigley y !arry $. Mitchell, $i6e<o en %ngenier=a Mec>nica",
Mcraw-?ill, M@Aico, ,98B.

- M. C. Spott6, Proyecto de elemento6 de m>D/ina6",
#ditorial ReEert@ S( FGG;


- J. #. Shigley y J. J. *ic2er Jr, +eor=a de m>D/ina6 y mecani6mo6",
Mcraw-?ill ,99;

- ?. ?. Ma1ie y &. C. ReinholtH, Mecani6mo6 y din>mica de maD/inaria",
!im/6a Wiley FGGG

- Maria del Mar Serna Mart=neH, PC&3 #rrore6 de generacin del per.il en
dentad/ra6 de engranaIe6 tallada6 con .re6a madre".
*'#$, Madrid ,999

- #arle 0/c2ingham, (nalytical Mechanic6 o. ear6"

- itin M Maitra, ?and1oo2 o. ear $e6ign, Mcraw-?ill

- $arle W. $/dley, Man/al de #ngranIe6",
&ompa<=a #ditorial &ontinental, M@Aico ,9-;

- C.W. 0rown, S.R. $aEid6on, $.0. ?ane6, $.J. Wiere6 and (. 7apeleEich,
(naly6i6 and +e6ting o. ear6 with (6ymmetric %nEol/te +ooth Corm and
OptimiHed Cillet Corm .or Potencial (pplication in ?elicopter Main $riEe6"
#(R +#&?'O!O) J/nio4J/lio FG,,, http344www.geartechnology.com

99
- (leA 7apeleEich, $e6igning (6ymmetric ear6"
#(R Sol/tion6 Septem1er FG,,, http344www.gear6ol/tion6.com

También podría gustarte