Application Center - Maplesoft

App Preview:

Analytical Treatment of the Involute Gears Geometry

You can switch back to the summary page by clicking here.

Learn about Maple
Download Application


 

Image 

ANALYTICAL TREATMENT OF THE INVOLUTE GEARS GEOMETRY
Milan Batista
University of Ljubljana
Faculty of Maritime Studies and Transport
Slovenia
 

History: 19.04.2001,20.4.2001,21.04.2001,23.04.2001,24.04.2001,25.04.2001 

 

restart; -1; gc(); -1; with(plots); -1; with(plottools); -1; with(LinearAlgebra); -1 

 

Utility functions 

`:=`(rad, proc (a) options operator, arrow; evalf(`+`(`*`(`/`(1, 180), `*`(a, `*`(Pi))))) end proc); 1 

proc (a) options operator, arrow; evalf(`+`(`*`(`/`(1, 180), `*`(a, `*`(Pi))))) end proc (1)
 

 

Introduction 

It is well known  that the shape of the involute gear tooth consist of four curve segments:
  - tip circular arc
  - involute
  - fillet arc
  - root circular arc
When number of teeth of the gear is large, the filet arc can be approximated by fillet circle and the shape of the gear tooth can be easily visualised by using the standard methods which are well described in the textbooks. When the number of teeth is small an approximation of fillet with circular arc is not adequate.

In this paper we will show how to calculate the tooth shape of the gear when it is conjugate to the basic rack of an arbitrary shape and then we will  apply the method to the case when the basic rack has straight-sided teeth.
 

Basic Equations 

We get the shape of the gear tooth by rolling the basic rack on the pitch circle which has the radius R. In this way the shape of the gear is the envelope of the family of racks.In order to calculate envelope of the family of racks we first introduce two coordinate systems: fixed global coordinate system (X,Y) which has the origin in the center of the base circle and rack coordinate system (xi1,eta1). Those coordinate systems are connected by the transformations 

`:=`(X, proc (phi, t) options operator, arrow; `+`(X0(phi), `*`(xi10(t), `*`(cos(phi))), `-`(`*`(eta10(t), `*`(sin(phi))))) end proc) 

proc (phi, t) options operator, arrow; `+`(X0(phi), `*`(xi10(t), `*`(cos(phi))), `-`(`*`(eta10(t), `*`(sin(phi))))) end proc (2.1)
 

 

`:=`(Y, proc (phi, t) options operator, arrow; `+`(Y0(phi), `*`(xi10(t), `*`(sin(phi))), `*`(eta10(t), `*`(cos(phi)))) end proc) 

proc (phi, t) options operator, arrow; `+`(Y0(phi), `*`(xi10(t), `*`(sin(phi))), `*`(eta10(t), `*`(cos(phi)))) end proc (2.2)
 

where (X0,Y0) is the position of the rack coordinate system and (xi10(t),eta10(t)) is parametric description of the rack profile. During the rolling the rack describe the involute of the circle: 

 

`:=`(X0, proc (phi) options operator, arrow; `+`(`-`(`*`(R, `*`(sin(phi)))), `*`(R, `*`(phi, `*`(cos(phi))))) end proc) 

proc (phi) options operator, arrow; `+`(`-`(`*`(R, `*`(sin(phi)))), `*`(R, `*`(phi, `*`(cos(phi))))) end proc (2.3)
 

`:=`(Y0, proc (phi) options operator, arrow; `+`(`*`(R, `*`(cos(phi))), `*`(R, `*`(phi, `*`(sin(phi))))) end proc) 

proc (phi) options operator, arrow; `+`(`*`(R, `*`(cos(phi))), `*`(R, `*`(phi, `*`(sin(phi))))) end proc (2.4)
 

In general case, which also include a helical involute gear, the position of the rack on the pitch circle is determinated by basic rack helix angle beta0 and by the profil shift e. The transformation connected rack coordinate system with its position on the pitch circle is: 

 

`:=`(xi10, proc (t) options operator, arrow; `/`(`*`(xi(t)), `*`(cos(beta0))) end proc) 

proc (t) options operator, arrow; `/`(`*`(xi(t)), `*`(cos(beta0))) end proc (2.5)
 

`:=`(eta10, proc (t) options operator, arrow; `+`(eta(t), e) end proc) 

proc (t) options operator, arrow; `+`(eta(t), e) end proc (2.6)
 

 

The final parametric equation of the family of racks is now: 

 

`:=`(x, collect(X(phi, t), [cos(phi), sin(phi)])) 

`+`(`*`(`+`(`*`(R, `*`(phi)), `/`(`*`(xi(t)), `*`(cos(beta0)))), `*`(cos(phi))), `*`(`+`(`-`(R), `-`(eta(t)), `-`(e)), `*`(sin(phi)))) (2.7)
 

 

`:=`(y, collect(Y(phi, t), [sin(phi), cos(phi)])) 

`+`(`*`(`+`(`*`(R, `*`(phi)), `/`(`*`(xi(t)), `*`(cos(beta0)))), `*`(sin(phi))), `*`(`+`(R, eta(t), e), `*`(cos(phi)))) (2.8)
 

 

The condition for the envelope of a oneparametric family of curves is 

 

`:=`(P, collect(`+`(`-`(`*`(simplify(`+`(`*`(diff(X(phi, t), phi), `*`(diff(Y(phi, t), t))), `-`(`*`(diff(Y(phi, t), phi), `*`(diff(X(phi, t), t)))))), `*`(`^`(cos(beta0), 2))))), [diff(xi(t), t), dif...
`:=`(P, collect(`+`(`-`(`*`(simplify(`+`(`*`(diff(X(phi, t), phi), `*`(diff(Y(phi, t), t))), `-`(`*`(diff(Y(phi, t), phi), `*`(diff(X(phi, t), t)))))), `*`(`^`(cos(beta0), 2))))), [diff(xi(t), t), dif...
 

`+`(`*`(`+`(`*`(R, `*`(phi, `*`(cos(beta0)))), xi(t)), `*`(diff(xi(t), t))), `*`(`^`(cos(beta0), 2), `*`(`+`(eta(t), e), `*`(diff(eta(t), t))))) (2.9)
 

 

This equation yield the angle phi 

 

`:=`(phi, unapply(collect(solve(P, phi), [diff(eta(t), t)], factor), t)) 

proc (t) options operator, arrow; `+`(`-`(`/`(`*`(cos(beta0), `*`(`+`(eta(t), e), `*`(diff(eta(t), t)))), `*`(R, `*`(diff(xi(t), t))))), `-`(`/`(`*`(xi(t)), `*`(R, `*`(cos(beta0)))))) end proc (2.10)
 

 

By sibstituting phi(t) into parametric equations of the rack the envelope of the family of rack results 

 

`:=`(x, collect(X(phi(t), t), [xi(t), eta(t)])); -1 

 

`:=`(y, collect(Y(phi(t), t), [cos(phi), sin(phi)])); -1 

 

Tooth Profile 

We will now consider the shape of the gear tooth which is generated by standard rack with straight-sided teeth (Fig. 3). We note that the standard rack as it is shown on Fig. 3, is an odd periodic function with period Pi.which means that only half of the period is needed for generation of the gear tooth profile. Once the shape of one tooth is obtained, shapes for others can be easily generated by rotating one tooth  (z-1) times by angle increment 2*Pi/z.  

 

The following characteristics points are needed to descibe the rack geometry: 

 

`:=`(xi1, 0); -1 

`:=`(eta1, `*`(m, `*`(u))); -1 

`:=`(xi2, `*`(m, `*`(`+`(`*`(`/`(1, 4), `*`(Pi)), `-`(`*`(u, `*`(tan(alpha)))))))); -1 

`:=`(eta2, `*`(m, `*`(u))); -1 

`:=`(xi3, `*`(m, `*`(`+`(`*`(`/`(1, 4), `*`(Pi)), tan(alpha))))); -1 

`:=`(eta3, `+`(`-`(m))); -1 

`:=`(xi4, `+`(xi3, `*`(rho, `*`(cos(alpha))))); -1 

`:=`(eta4, `+`(`-`(`*`(m, `*`(`+`(1, cn)))))); -1 

`:=`(xi5, `+`(`*`(`/`(1, 2), `*`(m, `*`(Pi))))); -1 

`:=`(eta5, eta4); -1 

 

where alpha is pressure angle, u height factor of teeth between pitch and addendum circle, cn isclearance factor for depths. The rack tooth filet radius rho and it's centre coordinates  (xi0,eta0) are given by 

 

`:=`(xi0, xi4); -1 

`:=`(eta0, `+`(eta4, rho)); -1 

`:=`(rho, `/`(`*`(m, `*`(cn)), `*`(`+`(1, `-`(sin(alpha)))))); -1 

 

The parametric description of the rack geometry segments is now: 

`:=`(xi, proc (t) options operator, arrow; `+`(xi1, `*`(`+`(xi2, `-`(xi1)), `*`(t))) end proc) 

proc (t) options operator, arrow; `+`(xi1, `*`(`+`(xi2, `-`(xi1)), `*`(t))) end proc (3.1)
 

`:=`(eta, proc (t) options operator, arrow; `+`(eta1, `*`(`+`(eta2, `-`(eta1)), `*`(t))) end proc) 

proc (t) options operator, arrow; `+`(eta1, `*`(`+`(eta2, `-`(eta1)), `*`(t))) end proc (3.2)
 

`:=`(xi11, xi(t)) 

`*`(m, `*`(`+`(`*`(`/`(1, 4), `*`(Pi)), `-`(`*`(u, `*`(tan(alpha))))), `*`(t))) (3.3)
 

`:=`(eta11, eta(t)) 

`*`(m, `*`(u)) (3.4)
 

`:=`(xx1, x) 

`+`(`*`(sin(`/`(`*`(m, `*`(`+`(`*`(`/`(1, 4), `*`(Pi)), `-`(`*`(u, `*`(tan(alpha))))), `*`(t))), `*`(R, `*`(cos(beta0))))), `*`(m, `*`(u))), `*`(R, `*`(sin(`/`(`*`(m, `*`(`+`(`*`(`/`(1, 4), `*`(Pi)), ...
`+`(`*`(sin(`/`(`*`(m, `*`(`+`(`*`(`/`(1, 4), `*`(Pi)), `-`(`*`(u, `*`(tan(alpha))))), `*`(t))), `*`(R, `*`(cos(beta0))))), `*`(m, `*`(u))), `*`(R, `*`(sin(`/`(`*`(m, `*`(`+`(`*`(`/`(1, 4), `*`(Pi)), ...
(3.5)
 

 

`:=`(yy1, y) 

`+`(`*`(R, `*`(cos(`/`(`*`(m, `*`(`+`(`*`(`/`(1, 4), `*`(Pi)), `-`(`*`(u, `*`(tan(alpha))))), `*`(t))), `*`(R, `*`(cos(beta0))))))), `*`(`+`(`*`(m, `*`(u)), e), `*`(cos(`/`(`*`(m, `*`(`+`(`*`(`/`(1, 4... (3.6)
 

 

`:=`(xi, proc (t) options operator, arrow; `+`(xi2, `*`(`+`(xi3, `-`(xi2)), `*`(t))) end proc) 

proc (t) options operator, arrow; `+`(xi2, `*`(`+`(xi3, `-`(xi2)), `*`(t))) end proc (3.7)
 

`:=`(eta, proc (t) options operator, arrow; `+`(eta2, `*`(`+`(eta3, `-`(eta2)), `*`(t))) end proc) 

proc (t) options operator, arrow; `+`(eta2, `*`(`+`(eta3, `-`(eta2)), `*`(t))) end proc (3.8)
 

`:=`(xi22, xi(t)) 

`+`(`*`(m, `*`(`+`(`*`(`/`(1, 4), `*`(Pi)), `-`(`*`(u, `*`(tan(alpha))))))), `*`(`+`(`*`(m, `*`(`+`(`*`(`/`(1, 4), `*`(Pi)), tan(alpha)))), `-`(`*`(m, `*`(`+`(`*`(`/`(1, 4), `*`(Pi)), `-`(`*`(u, `*`(t... (3.9)
 

`:=`(eta22, eta(t)) 

`+`(`*`(m, `*`(u)), `*`(`+`(`-`(m), `-`(`*`(m, `*`(u)))), `*`(t))) (3.10)
 

`:=`(xx2, x); -1 

`:=`(yy2, y); -1 

 

`+`(`*`(`/`(1, 4), `*`(m, `*`(Pi))), `*`(R, `*`(cos(beta0), `*`(tan(alpha0), `*`(`+`(`*`(`^`(sin(alpha0), 2)), `/`(`*`(e1), `*`(R))))))), `-`(xi22)) 

`+`(`*`(`/`(1, 4), `*`(m, `*`(Pi))), `*`(R, `*`(cos(beta0), `*`(tan(alpha0), `*`(`+`(`*`(`^`(sin(alpha0), 2)), `/`(`*`(e1), `*`(R))))))), `-`(`*`(m, `*`(`+`(`*`(`/`(1, 4), `*`(Pi)), `-`(`*`(u, `*`(tan...
`+`(`*`(`/`(1, 4), `*`(m, `*`(Pi))), `*`(R, `*`(cos(beta0), `*`(tan(alpha0), `*`(`+`(`*`(`^`(sin(alpha0), 2)), `/`(`*`(e1), `*`(R))))))), `-`(`*`(m, `*`(`+`(`*`(`/`(1, 4), `*`(Pi)), `-`(`*`(u, `*`(tan...
(3.11)
 

 

solve(`+`(`*`(`/`(1, 4), `*`(m, `*`(Pi))), `*`(R, `*`(cos(beta0), `*`(tan(alpha0), `*`(`+`(`*`(`^`(sin(alpha0), 2)), `/`(`*`(e1), `*`(R))))))), `-`(`*`(m, `*`(`+`(`*`(`/`(1, 4), `*`(Pi)), `-`(`*`(u, `... 

`/`(`*`(`+`(`*`(cos(beta0), `*`(tan(alpha0), `*`(`^`(sin(alpha0), 2), `*`(R)))), `*`(cos(beta0), `*`(tan(alpha0), `*`(e1))), `*`(m, `*`(u, `*`(tan(alpha)))))), `*`(m, `*`(tan(alpha), `*`(`+`(1, u))))) (3.12)
 

expand(`/`(`*`(`+`(`*`(cos(beta0), `*`(tan(alpha0), `*`(`^`(sin(alpha0), 2), `*`(R)))), `*`(cos(beta0), `*`(tan(alpha0), `*`(e1))), `*`(m, `*`(u, `*`(tan(alpha)))))), `*`(m, `*`(tan(alpha), `*`(`+`(1,... 

`+`(`/`(`*`(cos(beta0), `*`(tan(alpha0), `*`(`^`(sin(alpha0), 2), `*`(R)))), `*`(m, `*`(tan(alpha), `*`(`+`(1, u))))), `/`(`*`(cos(beta0), `*`(tan(alpha0), `*`(e1))), `*`(m, `*`(tan(alpha), `*`(`+`(1,... (3.13)
 

 

subs(R = `*`(m, `*`(z, `*`(`/`(`+`(`*`(2, `*`(cos(beta0)))))))), cos(beta0) = `/`(`*`(tan(alpha)), `*`(tan(alpha0))), `+`(`/`(`*`(cos(beta0), `*`(tan(alpha0), `*`(`^`(sin(alpha0), 2), `*`(R)))), `*`(m... 

`+`(`/`(`*`(`/`(1, 2), `*`(tan(alpha0), `*`(`^`(sin(alpha0), 2), `*`(z)))), `*`(tan(alpha), `*`(`+`(1, u)))), `/`(`*`(e1), `*`(m, `*`(`+`(1, u)))), `/`(`*`(u), `*`(`+`(1, u)))) (3.14)
 

 

`:=`(xi, proc (t) options operator, arrow; `+`(xi0, `-`(`*`(rho, `*`(cos(t))))) end proc) 

proc (t) options operator, arrow; `+`(xi0, `-`(`*`(rho, `*`(cos(t))))) end proc (3.15)
 

`:=`(eta, proc (t) options operator, arrow; `+`(eta0, `-`(`*`(rho, `*`(sin(t))))) end proc) 

proc (t) options operator, arrow; `+`(eta0, `-`(`*`(rho, `*`(sin(t))))) end proc (3.16)
 

`:=`(xi33, xi(t)) 

`+`(`*`(m, `*`(`+`(`*`(`/`(1, 4), `*`(Pi)), tan(alpha)))), `/`(`*`(m, `*`(cn, `*`(cos(alpha)))), `*`(`+`(1, `-`(sin(alpha))))), `-`(`/`(`*`(m, `*`(cn, `*`(cos(t)))), `*`(`+`(1, `-`(sin(alpha))))))) (3.17)
 

`:=`(eta33, eta(t)) 

`+`(`-`(`*`(m, `*`(`+`(1, cn)))), `/`(`*`(m, `*`(cn)), `*`(`+`(1, `-`(sin(alpha))))), `-`(`/`(`*`(m, `*`(cn, `*`(sin(t)))), `*`(`+`(1, `-`(sin(alpha))))))) (3.18)
 

`:=`(xx3, x); -1 

`:=`(yy3, y); -1 

 

`:=`(xi, proc (t) options operator, arrow; `+`(xi4, `*`(`+`(xi5, `-`(xi4)), `*`(t))) end proc) 

proc (t) options operator, arrow; `+`(xi4, `*`(`+`(xi5, `-`(xi4)), `*`(t))) end proc (3.19)
 

`:=`(eta, proc (t) options operator, arrow; `+`(eta4, `*`(`+`(eta5, `-`(eta4)), `*`(t))) end proc) 

proc (t) options operator, arrow; `+`(eta4, `*`(`+`(eta5, `-`(eta4)), `*`(t))) end proc (3.20)
 

`:=`(xi444, xi(t)) 

`+`(`*`(m, `*`(`+`(`*`(`/`(1, 4), `*`(Pi)), tan(alpha)))), `/`(`*`(m, `*`(cn, `*`(cos(alpha)))), `*`(`+`(1, `-`(sin(alpha))))), `*`(`+`(`*`(`/`(1, 2), `*`(m, `*`(Pi))), `-`(`*`(m, `*`(`+`(`*`(`/`(1, 4... (3.21)
 

`:=`(eta44, eta(t)) 

`+`(`-`(`*`(m, `*`(`+`(1, cn))))) (3.22)
 

`:=`(xx4, x); -1 

`:=`(yy4, y); -1 

 

`:=`(Rr2, collect(simplify(`+`(`*`(`^`(xx2, 2)), `*`(`^`(yy2, 2))), trig), t, factor)) 

`+`(`/`(`*`(`^`(m, 2), `*`(`^`(`+`(1, u), 2), `*`(`+`(1, `-`(`*`(`^`(cos(alpha), 2))), `*`(`^`(cos(beta0), 2), `*`(`^`(cos(alpha), 2)))), `*`(`^`(t, 2))))), `*`(`^`(sin(alpha), 2))), `-`(`/`(`*`(2, `*...
`+`(`/`(`*`(`^`(m, 2), `*`(`^`(`+`(1, u), 2), `*`(`+`(1, `-`(`*`(`^`(cos(alpha), 2))), `*`(`^`(cos(beta0), 2), `*`(`^`(cos(alpha), 2)))), `*`(`^`(t, 2))))), `*`(`^`(sin(alpha), 2))), `-`(`/`(`*`(2, `*...
`+`(`/`(`*`(`^`(m, 2), `*`(`^`(`+`(1, u), 2), `*`(`+`(1, `-`(`*`(`^`(cos(alpha), 2))), `*`(`^`(cos(beta0), 2), `*`(`^`(cos(alpha), 2)))), `*`(`^`(t, 2))))), `*`(`^`(sin(alpha), 2))), `-`(`/`(`*`(2, `*...
`+`(`/`(`*`(`^`(m, 2), `*`(`^`(`+`(1, u), 2), `*`(`+`(1, `-`(`*`(`^`(cos(alpha), 2))), `*`(`^`(cos(beta0), 2), `*`(`^`(cos(alpha), 2)))), `*`(`^`(t, 2))))), `*`(`^`(sin(alpha), 2))), `-`(`/`(`*`(2, `*...
`+`(`/`(`*`(`^`(m, 2), `*`(`^`(`+`(1, u), 2), `*`(`+`(1, `-`(`*`(`^`(cos(alpha), 2))), `*`(`^`(cos(beta0), 2), `*`(`^`(cos(alpha), 2)))), `*`(`^`(t, 2))))), `*`(`^`(sin(alpha), 2))), `-`(`/`(`*`(2, `*...
(3.23)
 

 

Rack Data 

 

`:=`(alpha, rad(20)) 

.3490658504 (3.1.1)
 

`:=`(beta0, rad(15)) 

.2617993878 (3.1.2)
 

`:=`(m, 3) 

3 (3.1.3)
 

`:=`(u, 1) 

1 (3.1.4)
 

`:=`(cn, .167) 

.167 (3.1.5)
 

 

Plot Rack 

`:=`(rack, plot({[xi11, eta11, t = 0 .. 1], [xi22, eta22, t = 0 .. 1], [xi33, eta33, t = alpha .. `+`(`*`(`/`(1, 2), `*`(Pi)))], [xi444, eta44, t = 0 .. 1]}, scaling = constrained, color = black, axes...
`:=`(rack, plot({[xi11, eta11, t = 0 .. 1], [xi22, eta22, t = 0 .. 1], [xi33, eta33, t = alpha .. `+`(`*`(`/`(1, 2), `*`(Pi)))], [xi444, eta44, t = 0 .. 1]}, scaling = constrained, color = black, axes...
 

display(rack) 

Plot_2d
 

 

Gear Data 

 

`:=`(z1, 8); -1 

`:=`(R, `*`(m, `*`(z1, `*`(`/`(`+`(`*`(2, `*`(cos(beta0))))))))) 

12.42331416 (3.2.1)
 

`:=`(R1, R); -1 

`:=`(e, 0); -1 

`:=`(e1, e); -1 

 

Plot the Envelope of a Family of the Racks 

 

plot({[xx1, yy1, t = 0 .. 1], [xx2, yy2, t = 0 .. 1], [xx3, yy3, t = alpha .. `+`(`*`(`/`(1, 2), `*`(Pi)))], [xx4, yy4, t = 0 .. 1]}, scaling = constrained, color = black, axes = boxed)
plot({[xx1, yy1, t = 0 .. 1], [xx2, yy2, t = 0 .. 1], [xx3, yy3, t = alpha .. `+`(`*`(`/`(1, 2), `*`(Pi)))], [xx4, yy4, t = 0 .. 1]}, scaling = constrained, color = black, axes = boxed)
 

Plot_2d
 

The limit  number of teeth for non-undercutting gear is 

 

`:=`(alpha0, arctan(`/`(`*`(tan(alpha)), `*`(cos(beta0))))) 

.3603563240 (3.3.1)
 

`:=`(zk, `/`(`*`(`*`(2, `+`(1, `-`(e1))), `*`(cos(beta0))), `*`(`^`(sin(alpha0), 2)))) 

15.53782431 (3.3.2)
 

 

Geometry Cleaning 

 

In order to obtain the shape of the gear tooth profile from the envelope of the family of racks we must determine the initial and final value of the  parameter t  for each curve segment. To do this the intersection point between tip circle arc and involute and the intersection point between involute  and filet must be calculated.  

 

Intersection Between Tip Circle and Involute 

 

The tip cicle radius is 

 

`:=`(Rg, evalf(simplify(sqrt(`+`(`*`(`^`(xx1, 2)), `*`(`^`(yy1, 2))))))) 

15.42331416 (3.4.1)
 

Start parameter of involute is 

 

`:=`(tt, solve(Rr2 = `*`(`^`(Rg, 2)), t)) 

1.353081155, .1617914438 (3.4.2)
 

 

`:=`(t2, min(tt[1], tt[2])) 

.1617914438 (3.4.3)
 

 

Ena parameter of tip circle arc is 

 

`:=`(tt, convert(`+`(`/`(`*`(xx1), `*`(yy1)), `-`(evalf(subs(t = t2, `/`(`*`(xx2), `*`(yy2)))))), tan)) 

`+`(`*`(1.000000000, `*`(tan(`+`(`*`(.2500000001, `*`(`+`(`*`(`/`(1, 4), `*`(Pi)), `-`(.3639702343)), `*`(t))))))), `-`(0.5806298551e-1)) (3.4.4)
 

 

`:=`(t1, solve(tt, t)) 

.5504890749 (3.4.5)
 

 

Critical parameter and radius are 

 

`:=`(tk, solve(`+`(`*`(`/`(1, 4), `*`(m, `*`(Pi))), `*`(R, `*`(cos(beta0), `*`(tan(alpha0), `*`(`+`(`*`(`^`(sin(alpha0), 2)), `/`(`*`(e1), `*`(R))))))), `-`(xi22)), t)) 

.7574363002 (3.4.6)
 

 

`:=`(Rk, sqrt(subs(t = tk, Rr2))) 

11.62538011 (3.4.7)
 

 

If there is intersection between involute and fillet - calculate it 

 

if `<`(tk, 1.0) then unassign('t3', 't4'); `:=`(tt, fsolve({`+`(subs(t = t3, xx2), `-`(subs(t = t4, xx3))), `+`(subs(t = t3, yy2), `-`(subs(t = t4, yy3)))}, {t3, t4}, {t3 = t2 .. tk, t4 = alpha .. `+`...
if `<`(tk, 1.0) then unassign('t3', 't4'); `:=`(tt, fsolve({`+`(subs(t = t3, xx2), `-`(subs(t = t4, xx3))), `+`(subs(t = t3, yy2), `-`(subs(t = t4, yy3)))}, {t3, t4}, {t3 = t2 .. tk, t4 = alpha .. `+`...
if `<`(tk, 1.0) then unassign('t3', 't4'); `:=`(tt, fsolve({`+`(subs(t = t3, xx2), `-`(subs(t = t4, xx3))), `+`(subs(t = t3, yy2), `-`(subs(t = t4, yy3)))}, {t3, t4}, {t3 = t2 .. tk, t4 = alpha .. `+`...
if `<`(tk, 1.0) then unassign('t3', 't4'); `:=`(tt, fsolve({`+`(subs(t = t3, xx2), `-`(subs(t = t4, xx3))), `+`(subs(t = t3, yy2), `-`(subs(t = t4, yy3)))}, {t3, t4}, {t3 = t2 .. tk, t4 = alpha .. `+`...
if `<`(tk, 1.0) then unassign('t3', 't4'); `:=`(tt, fsolve({`+`(subs(t = t3, xx2), `-`(subs(t = t4, xx3))), `+`(subs(t = t3, yy2), `-`(subs(t = t4, yy3)))}, {t3, t4}, {t3 = t2 .. tk, t4 = alpha .. `+`...
 

{t3 = .6608878818, t4 = .3938968560} (3.4.8)
 

 

if `>=`(tk, 1.0) then `:=`(t3, evalf(min(1, tk))); `:=`(t4, evalf(alpha)) end if 

 

 

Plot Gear Tooth (2) 

 

plot({[xx1, yy1, t = 0 .. t1], [xx2, yy2, t = t2 .. t3], [xx3, yy3, t = t4 .. `+`(`*`(`/`(1, 2), `*`(Pi)))], [xx4, yy4, t = 0 .. 1]}, scaling = constrained, color = black, axes = boxed, thickness = 5)
plot({[xx1, yy1, t = 0 .. t1], [xx2, yy2, t = t2 .. t3], [xx3, yy3, t = t4 .. `+`(`*`(`/`(1, 2), `*`(Pi)))], [xx4, yy4, t = 0 .. 1]}, scaling = constrained, color = black, axes = boxed, thickness = 5)
 

Plot_2d
 

 

Plot rack and contact zone 

`:=`(rack1, plot({[xi11, eta11, t = 0 .. t1], [xi22, eta22, t = t2 .. t3], [xi33, eta33, t = t4 .. `+`(`*`(`/`(1, 2), `*`(Pi)))], [xi444, eta44, t = 0 .. 1]}, scaling = constrained, color = black, axe...
`:=`(rack1, plot({[xi11, eta11, t = 0 .. t1], [xi22, eta22, t = t2 .. t3], [xi33, eta33, t = t4 .. `+`(`*`(`/`(1, 2), `*`(Pi)))], [xi444, eta44, t = 0 .. 1]}, scaling = constrained, color = black, axe...
 

Plot_2d
 

unassign('xx', 'yy'); -1 

gc(); -1 

`:=`(xx, Vector(79, [])) 

Vector[column](%id = 50607376) (3.5.1)
 

`:=`(yy, Vector(79, [])) 

Vector[column](%id = 50914984) (3.5.2)
 

 

Plot Gear 

 

`:=`(n1, 5); -1 

`:=`(dt, `/`(`*`(t1), `*`(`+`(n1, `-`(1))))); -1 

 

for i to n1 do `:=`(tau, `*`(`+`(i, `-`(1)), `*`(dt))); `:=`(xx[i], evalf(subs(t = tau, xx1))); `:=`(yy[i], evalf(subs(t = tau, yy1))) end do; -1
for i to n1 do `:=`(tau, `*`(`+`(i, `-`(1)), `*`(dt))); `:=`(xx[i], evalf(subs(t = tau, xx1))); `:=`(yy[i], evalf(subs(t = tau, yy1))) end do; -1
for i to n1 do `:=`(tau, `*`(`+`(i, `-`(1)), `*`(dt))); `:=`(xx[i], evalf(subs(t = tau, xx1))); `:=`(yy[i], evalf(subs(t = tau, yy1))) end do; -1
for i to n1 do `:=`(tau, `*`(`+`(i, `-`(1)), `*`(dt))); `:=`(xx[i], evalf(subs(t = tau, xx1))); `:=`(yy[i], evalf(subs(t = tau, yy1))) end do; -1
for i to n1 do `:=`(tau, `*`(`+`(i, `-`(1)), `*`(dt))); `:=`(xx[i], evalf(subs(t = tau, xx1))); `:=`(yy[i], evalf(subs(t = tau, yy1))) end do; -1
 

 

`:=`(n2, 15); -1 

`:=`(dt, `/`(`*`(`+`(t3, `-`(t2))), `*`(n2))); -1 

 

for i to n2 do `:=`(tau, `+`(t2, `*`(i, `*`(dt)))); `:=`(xx[`+`(i, n1)], evalf(subs(t = tau, xx2))); `:=`(yy[`+`(i, n1)], evalf(subs(t = tau, yy2))) end do; -1
for i to n2 do `:=`(tau, `+`(t2, `*`(i, `*`(dt)))); `:=`(xx[`+`(i, n1)], evalf(subs(t = tau, xx2))); `:=`(yy[`+`(i, n1)], evalf(subs(t = tau, yy2))) end do; -1
for i to n2 do `:=`(tau, `+`(t2, `*`(i, `*`(dt)))); `:=`(xx[`+`(i, n1)], evalf(subs(t = tau, xx2))); `:=`(yy[`+`(i, n1)], evalf(subs(t = tau, yy2))) end do; -1
for i to n2 do `:=`(tau, `+`(t2, `*`(i, `*`(dt)))); `:=`(xx[`+`(i, n1)], evalf(subs(t = tau, xx2))); `:=`(yy[`+`(i, n1)], evalf(subs(t = tau, yy2))) end do; -1
for i to n2 do `:=`(tau, `+`(t2, `*`(i, `*`(dt)))); `:=`(xx[`+`(i, n1)], evalf(subs(t = tau, xx2))); `:=`(yy[`+`(i, n1)], evalf(subs(t = tau, yy2))) end do; -1
 

 

`:=`(n3, 15); -1 

`:=`(dt, `/`(`*`(`+`(`*`(`/`(1, 2), `*`(Pi)), `-`(t4))), `*`(n3))); -1 

 

for i to n3 do `:=`(tau, `+`(t4, `*`(i, `*`(dt)))); `:=`(xx[`+`(i, n1, n2)], evalf(subs(t = tau, xx3))); `:=`(yy[`+`(i, n1, n2)], evalf(subs(t = tau, yy3))) end do; -1
for i to n3 do `:=`(tau, `+`(t4, `*`(i, `*`(dt)))); `:=`(xx[`+`(i, n1, n2)], evalf(subs(t = tau, xx3))); `:=`(yy[`+`(i, n1, n2)], evalf(subs(t = tau, yy3))) end do; -1
for i to n3 do `:=`(tau, `+`(t4, `*`(i, `*`(dt)))); `:=`(xx[`+`(i, n1, n2)], evalf(subs(t = tau, xx3))); `:=`(yy[`+`(i, n1, n2)], evalf(subs(t = tau, yy3))) end do; -1
for i to n3 do `:=`(tau, `+`(t4, `*`(i, `*`(dt)))); `:=`(xx[`+`(i, n1, n2)], evalf(subs(t = tau, xx3))); `:=`(yy[`+`(i, n1, n2)], evalf(subs(t = tau, yy3))) end do; -1
for i to n3 do `:=`(tau, `+`(t4, `*`(i, `*`(dt)))); `:=`(xx[`+`(i, n1, n2)], evalf(subs(t = tau, xx3))); `:=`(yy[`+`(i, n1, n2)], evalf(subs(t = tau, yy3))) end do; -1
 

 

`:=`(n4, 5); -1 

`:=`(dt, `/`(1, `*`(`+`(n4, `-`(1))))); -1 

for i to n4 do `:=`(tau, `*`(i, `*`(dt))); `:=`(xx[`+`(i, n1, n2, n3)], evalf(subs(t = tau, xx4))); `:=`(yy[`+`(i, n1, n2, n3)], evalf(subs(t = tau, yy4))) end do; -1
for i to n4 do `:=`(tau, `*`(i, `*`(dt))); `:=`(xx[`+`(i, n1, n2, n3)], evalf(subs(t = tau, xx4))); `:=`(yy[`+`(i, n1, n2, n3)], evalf(subs(t = tau, yy4))) end do; -1
for i to n4 do `:=`(tau, `*`(i, `*`(dt))); `:=`(xx[`+`(i, n1, n2, n3)], evalf(subs(t = tau, xx4))); `:=`(yy[`+`(i, n1, n2, n3)], evalf(subs(t = tau, yy4))) end do; -1
for i to n4 do `:=`(tau, `*`(i, `*`(dt))); `:=`(xx[`+`(i, n1, n2, n3)], evalf(subs(t = tau, xx4))); `:=`(yy[`+`(i, n1, n2, n3)], evalf(subs(t = tau, yy4))) end do; -1
for i to n4 do `:=`(tau, `*`(i, `*`(dt))); `:=`(xx[`+`(i, n1, n2, n3)], evalf(subs(t = tau, xx4))); `:=`(yy[`+`(i, n1, n2, n3)], evalf(subs(t = tau, yy4))) end do; -1
 

 

`:=`(n, `+`(n1, n2, n3, n4)) 

40 (3.6.1)
 

yy[n] 

8.203568634 (3.6.2)
 

 

Mirror 

for i to `+`(`*`(`/`(1, 2), `*`(n))) do `:=`(tt, xx[i]); `:=`(xx[i], xx[`+`(n, `-`(i), 1)]); `:=`(xx[`+`(n, `-`(i), 1)], tt); `:=`(tt, yy[i]); `:=`(yy[i], yy[`+`(n, `-`(i), 1)]); `:=`(yy[`+`(n, `-`(i)...
for i to `+`(`*`(`/`(1, 2), `*`(n))) do `:=`(tt, xx[i]); `:=`(xx[i], xx[`+`(n, `-`(i), 1)]); `:=`(xx[`+`(n, `-`(i), 1)], tt); `:=`(tt, yy[i]); `:=`(yy[i], yy[`+`(n, `-`(i), 1)]); `:=`(yy[`+`(n, `-`(i)...
for i to `+`(`*`(`/`(1, 2), `*`(n))) do `:=`(tt, xx[i]); `:=`(xx[i], xx[`+`(n, `-`(i), 1)]); `:=`(xx[`+`(n, `-`(i), 1)], tt); `:=`(tt, yy[i]); `:=`(yy[i], yy[`+`(n, `-`(i), 1)]); `:=`(yy[`+`(n, `-`(i)...
for i to `+`(`*`(`/`(1, 2), `*`(n))) do `:=`(tt, xx[i]); `:=`(xx[i], xx[`+`(n, `-`(i), 1)]); `:=`(xx[`+`(n, `-`(i), 1)], tt); `:=`(tt, yy[i]); `:=`(yy[i], yy[`+`(n, `-`(i), 1)]); `:=`(yy[`+`(n, `-`(i)...
for i to `+`(`*`(`/`(1, 2), `*`(n))) do `:=`(tt, xx[i]); `:=`(xx[i], xx[`+`(n, `-`(i), 1)]); `:=`(xx[`+`(n, `-`(i), 1)], tt); `:=`(tt, yy[i]); `:=`(yy[i], yy[`+`(n, `-`(i), 1)]); `:=`(yy[`+`(n, `-`(i)...
for i to `+`(`*`(`/`(1, 2), `*`(n))) do `:=`(tt, xx[i]); `:=`(xx[i], xx[`+`(n, `-`(i), 1)]); `:=`(xx[`+`(n, `-`(i), 1)], tt); `:=`(tt, yy[i]); `:=`(yy[i], yy[`+`(n, `-`(i), 1)]); `:=`(yy[`+`(n, `-`(i)...
for i to `+`(`*`(`/`(1, 2), `*`(n))) do `:=`(tt, xx[i]); `:=`(xx[i], xx[`+`(n, `-`(i), 1)]); `:=`(xx[`+`(n, `-`(i), 1)], tt); `:=`(tt, yy[i]); `:=`(yy[i], yy[`+`(n, `-`(i), 1)]); `:=`(yy[`+`(n, `-`(i)...
for i to `+`(`*`(`/`(1, 2), `*`(n))) do `:=`(tt, xx[i]); `:=`(xx[i], xx[`+`(n, `-`(i), 1)]); `:=`(xx[`+`(n, `-`(i), 1)], tt); `:=`(tt, yy[i]); `:=`(yy[i], yy[`+`(n, `-`(i), 1)]); `:=`(yy[`+`(n, `-`(i)...
 

 

for i to `+`(n, `-`(1)) do `:=`(xx[`+`(`*`(2, `*`(n)), `-`(i))], `+`(`-`(xx[i]))); `:=`(yy[`+`(`*`(2, `*`(n)), `-`(i))], yy[i]) end do; -1 

 

pointplot([seq([xx[i], yy[i]], i = 1 .. `+`(`*`(2, `*`(n)), `-`(1)))], scaling = constrained, color = black, axes = boxed, style = line)
pointplot([seq([xx[i], yy[i]], i = 1 .. `+`(`*`(2, `*`(n)), `-`(1)))], scaling = constrained, color = black, axes = boxed, style = line)
 

Plot_2d
 

 

unassign('xt1', 'yt1'); -1 

gc(); -1 

`:=`(xt1, Vector(`*`(`+`(`*`(2, `*`(n)), `-`(1)), `*`(z1)), [])) 

Vector[column](%id = 50924888) (3.6.3)
 

`:=`(yt1, Vector(`*`(`+`(`*`(2, `*`(n)), `-`(1)), `*`(z1)), [])); 1 

Vector[column](%id = 50970132) (3.6.4)
 

`:=`(j, 0); -1; for k from 0 to `+`(z1, `-`(1)) do `:=`(phi, `+`(`/`(`*`(2, `*`(Pi, `*`(k))), `*`(z1)))); `:=`(cs, cos(phi)); `:=`(sn, sin(phi)); for kk to `+`(`*`(2, `*`(n)), `-`(1)) do `:=`(j, `+`(j...
`:=`(j, 0); -1; for k from 0 to `+`(z1, `-`(1)) do `:=`(phi, `+`(`/`(`*`(2, `*`(Pi, `*`(k))), `*`(z1)))); `:=`(cs, cos(phi)); `:=`(sn, sin(phi)); for kk to `+`(`*`(2, `*`(n)), `-`(1)) do `:=`(j, `+`(j...
`:=`(j, 0); -1; for k from 0 to `+`(z1, `-`(1)) do `:=`(phi, `+`(`/`(`*`(2, `*`(Pi, `*`(k))), `*`(z1)))); `:=`(cs, cos(phi)); `:=`(sn, sin(phi)); for kk to `+`(`*`(2, `*`(n)), `-`(1)) do `:=`(j, `+`(j...
`:=`(j, 0); -1; for k from 0 to `+`(z1, `-`(1)) do `:=`(phi, `+`(`/`(`*`(2, `*`(Pi, `*`(k))), `*`(z1)))); `:=`(cs, cos(phi)); `:=`(sn, sin(phi)); for kk to `+`(`*`(2, `*`(n)), `-`(1)) do `:=`(j, `+`(j...
`:=`(j, 0); -1; for k from 0 to `+`(z1, `-`(1)) do `:=`(phi, `+`(`/`(`*`(2, `*`(Pi, `*`(k))), `*`(z1)))); `:=`(cs, cos(phi)); `:=`(sn, sin(phi)); for kk to `+`(`*`(2, `*`(n)), `-`(1)) do `:=`(j, `+`(j...
`:=`(j, 0); -1; for k from 0 to `+`(z1, `-`(1)) do `:=`(phi, `+`(`/`(`*`(2, `*`(Pi, `*`(k))), `*`(z1)))); `:=`(cs, cos(phi)); `:=`(sn, sin(phi)); for kk to `+`(`*`(2, `*`(n)), `-`(1)) do `:=`(j, `+`(j...
`:=`(j, 0); -1; for k from 0 to `+`(z1, `-`(1)) do `:=`(phi, `+`(`/`(`*`(2, `*`(Pi, `*`(k))), `*`(z1)))); `:=`(cs, cos(phi)); `:=`(sn, sin(phi)); for kk to `+`(`*`(2, `*`(n)), `-`(1)) do `:=`(j, `+`(j...
`:=`(j, 0); -1; for k from 0 to `+`(z1, `-`(1)) do `:=`(phi, `+`(`/`(`*`(2, `*`(Pi, `*`(k))), `*`(z1)))); `:=`(cs, cos(phi)); `:=`(sn, sin(phi)); for kk to `+`(`*`(2, `*`(n)), `-`(1)) do `:=`(j, `+`(j...
`:=`(j, 0); -1; for k from 0 to `+`(z1, `-`(1)) do `:=`(phi, `+`(`/`(`*`(2, `*`(Pi, `*`(k))), `*`(z1)))); `:=`(cs, cos(phi)); `:=`(sn, sin(phi)); for kk to `+`(`*`(2, `*`(n)), `-`(1)) do `:=`(j, `+`(j...
`:=`(j, 0); -1; for k from 0 to `+`(z1, `-`(1)) do `:=`(phi, `+`(`/`(`*`(2, `*`(Pi, `*`(k))), `*`(z1)))); `:=`(cs, cos(phi)); `:=`(sn, sin(phi)); for kk to `+`(`*`(2, `*`(n)), `-`(1)) do `:=`(j, `+`(j...
 

 

`:=`(N1, j); -1 

 

pointplot([seq([xt1[i], yt1[i]], i = 1 .. N1)], scaling = constrained, color = black, axes = boxed, style = line)
pointplot([seq([xt1[i], yt1[i]], i = 1 .. N1)], scaling = constrained, color = black, axes = boxed, style = line)
 

Plot_2d
 

 

Plot Second Gear 

 

`:=`(z2, 8); -1 

`:=`(R, `*`(m, `*`(z2, `*`(`/`(`+`(`*`(2, `*`(cos(beta0))))))))) 

12.42331416 (3.6.5)
 

`:=`(R2, R); -1 

`:=`(e, 0); -1 

`:=`(e2, e); -1 

 

plot({[xx1, yy1, t = 0 .. 1], [xx2, yy2, t = 0 .. 1], [xx3, yy3, t = alpha .. `+`(`*`(`/`(1, 2), `*`(Pi)))], [xx4, yy4, t = 0 .. 1]}, scaling = constrained, color = black, axes = boxed)
plot({[xx1, yy1, t = 0 .. 1], [xx2, yy2, t = 0 .. 1], [xx3, yy3, t = alpha .. `+`(`*`(`/`(1, 2), `*`(Pi)))], [xx4, yy4, t = 0 .. 1]}, scaling = constrained, color = black, axes = boxed)
 

Plot_2d
 

The limit  number of teeth for non-undercutting gear is`:=`(zk, `/`(`*`(`*`(2, `+`(1, `-`(e2))), `*`(cos(beta0))), `*`(`^`(sin(alpha0), 2)))) 

15.53782431 (3.6.6)
 

 

Geometry Cleaning 

 

In order to obtain the shape of the gear tooth profile from the envelope of the family of racks we must determine the initial and final value of the  parameter t  for each curve segment. To do this the intersection point between tip circle arc and involute and the intersection point between involute  and filet must be calculated.  

 

Intersection between tip circle and involute 

 

The tip cicle radius is 

 

`:=`(Rg, evalf(simplify(sqrt(`+`(`*`(`^`(xx1, 2)), `*`(`^`(yy1, 2))))))) 

15.42331416 (3.7.1)
 

Radius on involute is 

 

 

 

Start parameter of involute is 

 

`:=`(tt, solve(Rr2 = `*`(`^`(Rg, 2)), t)) 

1.353081155, .1617914438 (3.7.2)
 

`:=`(t2, min(tt[1], tt[2])) 

.1617914438 (3.7.3)
 

 

Ena parameter of tip circle arc is 

 

`:=`(tt, convert(`+`(`/`(`*`(xx1), `*`(yy1)), `-`(evalf(subs(t = t2, `/`(`*`(xx2), `*`(yy2)))))), tan)) 

`+`(`*`(1.000000000, `*`(tan(`+`(`*`(.2500000001, `*`(`+`(`*`(`/`(1, 4), `*`(Pi)), `-`(.3639702343)), `*`(t))))))), `-`(0.5806298551e-1)) (3.7.4)
 

`:=`(t1, solve(tt, t)) 

.5504890749 (3.7.5)
 

 

Critical parameter and radius are 

 

`:=`(tk, solve(`+`(`*`(`/`(1, 4), `*`(m, `*`(Pi))), `*`(R, `*`(cos(beta0), `*`(tan(alpha0), `*`(`+`(`*`(`^`(sin(alpha0), 2)), `/`(`*`(e2), `*`(R))))))), `-`(xi22)), t)) 

.7574363002 (3.7.6)
 

`:=`(Rk, sqrt(subs(t = tk, Rr))) 

`*`(`^`(Rr, `/`(1, 2))) (3.7.7)
 

 

If there is intersection between involute and fillet - calculate it 

 

if `<`(tk, 1.0) then unassign('t3', 't4'); `:=`(tt, fsolve({`+`(subs(t = t3, xx2), `-`(subs(t = t4, xx3))), `+`(subs(t = t3, yy2), `-`(subs(t = t4, yy3)))}, {t3, t4}, {t3 = t2 .. tk, t4 = alpha .. `+`...
if `<`(tk, 1.0) then unassign('t3', 't4'); `:=`(tt, fsolve({`+`(subs(t = t3, xx2), `-`(subs(t = t4, xx3))), `+`(subs(t = t3, yy2), `-`(subs(t = t4, yy3)))}, {t3, t4}, {t3 = t2 .. tk, t4 = alpha .. `+`...
if `<`(tk, 1.0) then unassign('t3', 't4'); `:=`(tt, fsolve({`+`(subs(t = t3, xx2), `-`(subs(t = t4, xx3))), `+`(subs(t = t3, yy2), `-`(subs(t = t4, yy3)))}, {t3, t4}, {t3 = t2 .. tk, t4 = alpha .. `+`...
if `<`(tk, 1.0) then unassign('t3', 't4'); `:=`(tt, fsolve({`+`(subs(t = t3, xx2), `-`(subs(t = t4, xx3))), `+`(subs(t = t3, yy2), `-`(subs(t = t4, yy3)))}, {t3, t4}, {t3 = t2 .. tk, t4 = alpha .. `+`...
if `<`(tk, 1.0) then unassign('t3', 't4'); `:=`(tt, fsolve({`+`(subs(t = t3, xx2), `-`(subs(t = t4, xx3))), `+`(subs(t = t3, yy2), `-`(subs(t = t4, yy3)))}, {t3, t4}, {t3 = t2 .. tk, t4 = alpha .. `+`...
if `<`(tk, 1.0) then unassign('t3', 't4'); `:=`(tt, fsolve({`+`(subs(t = t3, xx2), `-`(subs(t = t4, xx3))), `+`(subs(t = t3, yy2), `-`(subs(t = t4, yy3)))}, {t3, t4}, {t3 = t2 .. tk, t4 = alpha .. `+`...
 

{t3 = .6608878818, t4 = .3938968560} (3.7.8)
 

 

if `>=`(tk, 1.0) then `:=`(t3, evalf(min(1, tk))); `:=`(t4, evalf(alpha)) end if; 1 

 

 

Plot Gear Tooth (2) 

 

plot({[xx1, yy1, t = 0 .. t1], [xx2, yy2, t = t2 .. t3], [xx3, yy3, t = t4 .. `+`(`*`(`/`(1, 2), `*`(Pi)))], [xx4, yy4, t = 0 .. 1]}, scaling = constrained, color = black, axes = boxed, thickness = 5)
plot({[xx1, yy1, t = 0 .. t1], [xx2, yy2, t = t2 .. t3], [xx3, yy3, t = t4 .. `+`(`*`(`/`(1, 2), `*`(Pi)))], [xx4, yy4, t = 0 .. 1]}, scaling = constrained, color = black, axes = boxed, thickness = 5)
 

Plot_2d
 

Plot rack and contact zone 

 

`:=`(rack1, plot({[xi11, eta11, t = 0 .. t1], [xi22, eta22, t = t2 .. t3], [xi33, eta33, t = t4 .. `+`(`*`(`/`(1, 2), `*`(Pi)))], [xi444, eta44, t = 0 .. 1]}, scaling = constrained, color = black, axe...
`:=`(rack1, plot({[xi11, eta11, t = 0 .. t1], [xi22, eta22, t = t2 .. t3], [xi33, eta33, t = t4 .. `+`(`*`(`/`(1, 2), `*`(Pi)))], [xi444, eta44, t = 0 .. 1]}, scaling = constrained, color = black, axe...
 

display([rack, rack1]) 

Plot_2d
 

unassign('xx', 'yy'); -1 

gc(); -1 

`:=`(xx, Vector(200, [])) 

Vector[column](%id = 50975892) (3.7.9)
 

`:=`(yy, Vector(200, [])) 

Vector[column](%id = 51009436) (3.7.10)
 

 

Plot Gear 

 

`:=`(n1, 5); -1 

`:=`(dt, `/`(`*`(t1), `*`(`+`(n1, `-`(1))))); -1 

for i to n1 do `:=`(tau, `*`(`+`(i, `-`(1)), `*`(dt))); `:=`(xx[i], evalf(subs(t = tau, xx1))); `:=`(yy[i], evalf(subs(t = tau, yy1))) end do; -1
for i to n1 do `:=`(tau, `*`(`+`(i, `-`(1)), `*`(dt))); `:=`(xx[i], evalf(subs(t = tau, xx1))); `:=`(yy[i], evalf(subs(t = tau, yy1))) end do; -1
for i to n1 do `:=`(tau, `*`(`+`(i, `-`(1)), `*`(dt))); `:=`(xx[i], evalf(subs(t = tau, xx1))); `:=`(yy[i], evalf(subs(t = tau, yy1))) end do; -1
for i to n1 do `:=`(tau, `*`(`+`(i, `-`(1)), `*`(dt))); `:=`(xx[i], evalf(subs(t = tau, xx1))); `:=`(yy[i], evalf(subs(t = tau, yy1))) end do; -1
for i to n1 do `:=`(tau, `*`(`+`(i, `-`(1)), `*`(dt))); `:=`(xx[i], evalf(subs(t = tau, xx1))); `:=`(yy[i], evalf(subs(t = tau, yy1))) end do; -1
 

 

`:=`(n2, 15); -1 

`:=`(dt, `/`(`*`(`+`(t3, `-`(t2))), `*`(n2))); -1 

for i to n2 do `:=`(tau, `+`(t2, `*`(i, `*`(dt)))); `:=`(xx[`+`(i, n1)], evalf(subs(t = tau, xx2))); `:=`(yy[`+`(i, n1)], evalf(subs(t = tau, yy2))) end do; -1
for i to n2 do `:=`(tau, `+`(t2, `*`(i, `*`(dt)))); `:=`(xx[`+`(i, n1)], evalf(subs(t = tau, xx2))); `:=`(yy[`+`(i, n1)], evalf(subs(t = tau, yy2))) end do; -1
for i to n2 do `:=`(tau, `+`(t2, `*`(i, `*`(dt)))); `:=`(xx[`+`(i, n1)], evalf(subs(t = tau, xx2))); `:=`(yy[`+`(i, n1)], evalf(subs(t = tau, yy2))) end do; -1
for i to n2 do `:=`(tau, `+`(t2, `*`(i, `*`(dt)))); `:=`(xx[`+`(i, n1)], evalf(subs(t = tau, xx2))); `:=`(yy[`+`(i, n1)], evalf(subs(t = tau, yy2))) end do; -1
for i to n2 do `:=`(tau, `+`(t2, `*`(i, `*`(dt)))); `:=`(xx[`+`(i, n1)], evalf(subs(t = tau, xx2))); `:=`(yy[`+`(i, n1)], evalf(subs(t = tau, yy2))) end do; -1
 

 

`:=`(n3, 15); -1 

`:=`(dt, `/`(`*`(`+`(`*`(`/`(1, 2), `*`(Pi)), `-`(t4))), `*`(n3))); -1 

for i to n3 do `:=`(tau, `+`(t4, `*`(i, `*`(dt)))); `:=`(xx[`+`(i, n1, n2)], evalf(subs(t = tau, xx3))); `:=`(yy[`+`(i, n1, n2)], evalf(subs(t = tau, yy3))) end do; -1
for i to n3 do `:=`(tau, `+`(t4, `*`(i, `*`(dt)))); `:=`(xx[`+`(i, n1, n2)], evalf(subs(t = tau, xx3))); `:=`(yy[`+`(i, n1, n2)], evalf(subs(t = tau, yy3))) end do; -1
for i to n3 do `:=`(tau, `+`(t4, `*`(i, `*`(dt)))); `:=`(xx[`+`(i, n1, n2)], evalf(subs(t = tau, xx3))); `:=`(yy[`+`(i, n1, n2)], evalf(subs(t = tau, yy3))) end do; -1
for i to n3 do `:=`(tau, `+`(t4, `*`(i, `*`(dt)))); `:=`(xx[`+`(i, n1, n2)], evalf(subs(t = tau, xx3))); `:=`(yy[`+`(i, n1, n2)], evalf(subs(t = tau, yy3))) end do; -1
for i to n3 do `:=`(tau, `+`(t4, `*`(i, `*`(dt)))); `:=`(xx[`+`(i, n1, n2)], evalf(subs(t = tau, xx3))); `:=`(yy[`+`(i, n1, n2)], evalf(subs(t = tau, yy3))) end do; -1
 

 

`:=`(n4, 5); -1 

`:=`(dt, `/`(1, `*`(n4))); -1 

for i to n4 do `:=`(tau, `*`(i, `*`(dt))); `:=`(xx[`+`(i, n1, n2, n3)], evalf(subs(t = tau, xx4))); `:=`(yy[`+`(i, n1, n2, n3)], evalf(subs(t = tau, yy4))) end do; -1
for i to n4 do `:=`(tau, `*`(i, `*`(dt))); `:=`(xx[`+`(i, n1, n2, n3)], evalf(subs(t = tau, xx4))); `:=`(yy[`+`(i, n1, n2, n3)], evalf(subs(t = tau, yy4))) end do; -1
for i to n4 do `:=`(tau, `*`(i, `*`(dt))); `:=`(xx[`+`(i, n1, n2, n3)], evalf(subs(t = tau, xx4))); `:=`(yy[`+`(i, n1, n2, n3)], evalf(subs(t = tau, yy4))) end do; -1
for i to n4 do `:=`(tau, `*`(i, `*`(dt))); `:=`(xx[`+`(i, n1, n2, n3)], evalf(subs(t = tau, xx4))); `:=`(yy[`+`(i, n1, n2, n3)], evalf(subs(t = tau, yy4))) end do; -1
for i to n4 do `:=`(tau, `*`(i, `*`(dt))); `:=`(xx[`+`(i, n1, n2, n3)], evalf(subs(t = tau, xx4))); `:=`(yy[`+`(i, n1, n2, n3)], evalf(subs(t = tau, yy4))) end do; -1
 

 

`:=`(n, `+`(n1, n2, n3, n4)) 

40 (3.7.11)
 

yy[n] 

8.243143434 (3.7.12)
 

 

Mirror 

 

for i to `+`(`*`(`/`(1, 2), `*`(n))) do `:=`(tt, xx[i]); `:=`(xx[i], xx[`+`(n, `-`(i), 1)]); `:=`(xx[`+`(n, `-`(i), 1)], tt); `:=`(tt, yy[i]); `:=`(yy[i], yy[`+`(n, `-`(i), 1)]); `:=`(yy[`+`(n, `-`(i)...
for i to `+`(`*`(`/`(1, 2), `*`(n))) do `:=`(tt, xx[i]); `:=`(xx[i], xx[`+`(n, `-`(i), 1)]); `:=`(xx[`+`(n, `-`(i), 1)], tt); `:=`(tt, yy[i]); `:=`(yy[i], yy[`+`(n, `-`(i), 1)]); `:=`(yy[`+`(n, `-`(i)...
for i to `+`(`*`(`/`(1, 2), `*`(n))) do `:=`(tt, xx[i]); `:=`(xx[i], xx[`+`(n, `-`(i), 1)]); `:=`(xx[`+`(n, `-`(i), 1)], tt); `:=`(tt, yy[i]); `:=`(yy[i], yy[`+`(n, `-`(i), 1)]); `:=`(yy[`+`(n, `-`(i)...
for i to `+`(`*`(`/`(1, 2), `*`(n))) do `:=`(tt, xx[i]); `:=`(xx[i], xx[`+`(n, `-`(i), 1)]); `:=`(xx[`+`(n, `-`(i), 1)], tt); `:=`(tt, yy[i]); `:=`(yy[i], yy[`+`(n, `-`(i), 1)]); `:=`(yy[`+`(n, `-`(i)...
for i to `+`(`*`(`/`(1, 2), `*`(n))) do `:=`(tt, xx[i]); `:=`(xx[i], xx[`+`(n, `-`(i), 1)]); `:=`(xx[`+`(n, `-`(i), 1)], tt); `:=`(tt, yy[i]); `:=`(yy[i], yy[`+`(n, `-`(i), 1)]); `:=`(yy[`+`(n, `-`(i)...
for i to `+`(`*`(`/`(1, 2), `*`(n))) do `:=`(tt, xx[i]); `:=`(xx[i], xx[`+`(n, `-`(i), 1)]); `:=`(xx[`+`(n, `-`(i), 1)], tt); `:=`(tt, yy[i]); `:=`(yy[i], yy[`+`(n, `-`(i), 1)]); `:=`(yy[`+`(n, `-`(i)...
for i to `+`(`*`(`/`(1, 2), `*`(n))) do `:=`(tt, xx[i]); `:=`(xx[i], xx[`+`(n, `-`(i), 1)]); `:=`(xx[`+`(n, `-`(i), 1)], tt); `:=`(tt, yy[i]); `:=`(yy[i], yy[`+`(n, `-`(i), 1)]); `:=`(yy[`+`(n, `-`(i)...
for i to `+`(`*`(`/`(1, 2), `*`(n))) do `:=`(tt, xx[i]); `:=`(xx[i], xx[`+`(n, `-`(i), 1)]); `:=`(xx[`+`(n, `-`(i), 1)], tt); `:=`(tt, yy[i]); `:=`(yy[i], yy[`+`(n, `-`(i), 1)]); `:=`(yy[`+`(n, `-`(i)...
 

 

for i to `+`(n, `-`(1)) do `:=`(xx[`+`(`*`(2, `*`(n)), `-`(i))], `+`(`-`(xx[i]))); `:=`(yy[`+`(`*`(2, `*`(n)), `-`(i))], yy[i]) end do; -1 

 

pointplot([seq([xx[i], yy[i]], i = 1 .. `+`(`*`(2, `*`(n)), `-`(1)))], scaling = constrained, color = black, axes = boxed, style = line)
pointplot([seq([xx[i], yy[i]], i = 1 .. `+`(`*`(2, `*`(n)), `-`(1)))], scaling = constrained, color = black, axes = boxed, style = line)
 

Plot_2d
 

 

unassign('xt2', 'yt2'); -1 

gc(); -1 

`:=`(xt2, Vector(`*`(`+`(`*`(2, `*`(n)), `-`(1)), `*`(z2)), [])) 

Vector[column](%id = 51015076) (3.7.13)
 

`:=`(yt2, Vector(`*`(`+`(`*`(2, `*`(n)), `-`(1)), `*`(z2)), [])) 

Vector[column](%id = 51069836) (3.7.14)
 

`:=`(a, `+`(R1, R2)) 

24.84662832 (3.7.15)
 

 

`:=`(j, 0); -1 

 

for k from 0 to `+`(z2, `-`(1)) do if k = 0 then `:=`(phi, `/`(`*`(Pi), `*`(z2))) else `:=`(phi, `+`(phi, `/`(`*`(2, `*`(Pi)), `*`(z2)))) end if; `:=`(cs, cos(phi)); `:=`(sn, sin(phi)); for kk to `+`(...
for k from 0 to `+`(z2, `-`(1)) do if k = 0 then `:=`(phi, `/`(`*`(Pi), `*`(z2))) else `:=`(phi, `+`(phi, `/`(`*`(2, `*`(Pi)), `*`(z2)))) end if; `:=`(cs, cos(phi)); `:=`(sn, sin(phi)); for kk to `+`(...
for k from 0 to `+`(z2, `-`(1)) do if k = 0 then `:=`(phi, `/`(`*`(Pi), `*`(z2))) else `:=`(phi, `+`(phi, `/`(`*`(2, `*`(Pi)), `*`(z2)))) end if; `:=`(cs, cos(phi)); `:=`(sn, sin(phi)); for kk to `+`(...
for k from 0 to `+`(z2, `-`(1)) do if k = 0 then `:=`(phi, `/`(`*`(Pi), `*`(z2))) else `:=`(phi, `+`(phi, `/`(`*`(2, `*`(Pi)), `*`(z2)))) end if; `:=`(cs, cos(phi)); `:=`(sn, sin(phi)); for kk to `+`(...
for k from 0 to `+`(z2, `-`(1)) do if k = 0 then `:=`(phi, `/`(`*`(Pi), `*`(z2))) else `:=`(phi, `+`(phi, `/`(`*`(2, `*`(Pi)), `*`(z2)))) end if; `:=`(cs, cos(phi)); `:=`(sn, sin(phi)); for kk to `+`(...
for k from 0 to `+`(z2, `-`(1)) do if k = 0 then `:=`(phi, `/`(`*`(Pi), `*`(z2))) else `:=`(phi, `+`(phi, `/`(`*`(2, `*`(Pi)), `*`(z2)))) end if; `:=`(cs, cos(phi)); `:=`(sn, sin(phi)); for kk to `+`(...
for k from 0 to `+`(z2, `-`(1)) do if k = 0 then `:=`(phi, `/`(`*`(Pi), `*`(z2))) else `:=`(phi, `+`(phi, `/`(`*`(2, `*`(Pi)), `*`(z2)))) end if; `:=`(cs, cos(phi)); `:=`(sn, sin(phi)); for kk to `+`(...
for k from 0 to `+`(z2, `-`(1)) do if k = 0 then `:=`(phi, `/`(`*`(Pi), `*`(z2))) else `:=`(phi, `+`(phi, `/`(`*`(2, `*`(Pi)), `*`(z2)))) end if; `:=`(cs, cos(phi)); `:=`(sn, sin(phi)); for kk to `+`(...
for k from 0 to `+`(z2, `-`(1)) do if k = 0 then `:=`(phi, `/`(`*`(Pi), `*`(z2))) else `:=`(phi, `+`(phi, `/`(`*`(2, `*`(Pi)), `*`(z2)))) end if; `:=`(cs, cos(phi)); `:=`(sn, sin(phi)); for kk to `+`(...
for k from 0 to `+`(z2, `-`(1)) do if k = 0 then `:=`(phi, `/`(`*`(Pi), `*`(z2))) else `:=`(phi, `+`(phi, `/`(`*`(2, `*`(Pi)), `*`(z2)))) end if; `:=`(cs, cos(phi)); `:=`(sn, sin(phi)); for kk to `+`(...
for k from 0 to `+`(z2, `-`(1)) do if k = 0 then `:=`(phi, `/`(`*`(Pi), `*`(z2))) else `:=`(phi, `+`(phi, `/`(`*`(2, `*`(Pi)), `*`(z2)))) end if; `:=`(cs, cos(phi)); `:=`(sn, sin(phi)); for kk to `+`(...
for k from 0 to `+`(z2, `-`(1)) do if k = 0 then `:=`(phi, `/`(`*`(Pi), `*`(z2))) else `:=`(phi, `+`(phi, `/`(`*`(2, `*`(Pi)), `*`(z2)))) end if; `:=`(cs, cos(phi)); `:=`(sn, sin(phi)); for kk to `+`(...
 

 

`:=`(N2, j); -1 

 

pointplot([seq([xt2[i], yt2[i]], i = 1 .. N2)], scaling = constrained, color = black, axes = boxed, style = line, title = `2nd gear`)
pointplot([seq([xt2[i], yt2[i]], i = 1 .. N2)], scaling = constrained, color = black, axes = boxed, style = line, title = `2nd gear`)
 

Plot_2d
 

 

Animation 

`:=`(M, `+`(`*`(5, `*`(max(z1, z2))))) 

40 (4.1)
 

unassign('gear1', 'gear2', 'total'); -1 

gc(); -1 

`:=`(gear1, Vector(M, [])); -1 

`:=`(gear2, Vector(M, [])); -1 

`:=`(total, Vector(M, [])); -1 

 

unassign('xt11', 'yt11'); -1 

gc(); -1 

`:=`(xt11, Vector(N1, [])); -1 

`:=`(yt11, Vector(N1, [])); -1 

 

unassign('xt22', 'yt22'); -1 

gc(); -1 

`:=`(xt22, Vector(N2, [])); -1 

`:=`(yt22, Vector(N2, [])); -1 

 

`:=`(xt11, xt1); -1 

`:=`(yt11, yt1); -1 

`:=`(xt22, xt2); -1 

`:=`(yt22, yt2); -1 

 

`:=`(b, rectangle([`+`(`-`(R1)), `+`(`-`(max(R1, R2)))], [`+`(R2, a, `*`(1.1, `*`(m))), max(R1, R2)], color = red, style = line)); -1 

`:=`(c1, circle([0, 0], `+`(`*`(.8, `*`(m, `*`(`+`(`+`(`*`(`/`(1, 2), `*`(z1))), `+`(`-`(1), `-`(cn))))))), color = black)); -1 

`:=`(c2, circle([a, 0], `+`(`*`(.8, `*`(m, `*`(`+`(`+`(`*`(`/`(1, 2), `*`(z2))), `+`(`-`(1), `-`(cn))))))), color = black)); -1 

 

 

Button# Animation

Plot_2d 

 

 

 

 

plotsetup(gif, plotoutput = gears2); -1 

display([seq(total[i], i = 1 .. M)], insequence = true, scaling = constrained, axes = boxed, view = [2 .. `+`(a, R, `*`(1.1, `*`(m))), `+`(`-`(R), `-`(`*`(1.1, `*`(m)))) .. `+`(R, `*`(1.1, `*`(m)))])
display([seq(total[i], i = 1 .. M)], insequence = true, scaling = constrained, axes = boxed, view = [2 .. `+`(a, R, `*`(1.1, `*`(m))), `+`(`-`(R), `-`(`*`(1.1, `*`(m)))) .. `+`(R, `*`(1.1, `*`(m)))])