Comprehensive involute gear theory reference for gear modeling and machining. Use when calculating gear geometry, involute profiles, profile shift, tooth strength (Lewis/Hertz), helical/bevel/internal/rack/worm gear parameters, root fillet (Fetvaci epitrochoid), tooth measurement (span/over-pin), or generating gear tooth coordinates in Python.
Dense formula reference for involute gear geometry, strength analysis, and Python code patterns used in this project.
Involute parametric equations (base circle radius r_b, roll angle t >= 0):
Cartesian: x(t) = r_b * (cos(t) + t * sin(t)) y(t) = r_b * (sin(t) - t * cos(t))
Polar: r(t) = r_b * sqrt(1 + t^2) theta(t) = t - arctan(t)
Inverse (radius to parameter): t = sqrt((r / r_b)^2 - 1)
Involute function: inv(alpha) = tan(alpha) - alpha
Pressure angle at radius r: cos(alpha_r) = r_b / r
Parameter-pressure angle link: t = tan(alpha_r)
Key values: inv(20 deg) = 0.014904 rad, inv(14.5 deg) = 0.005215 rad
Inverse of inv() has NO closed-form solution. Use Newton-Raphson: alpha_{n+1} = alpha_n - (inv(alpha_n) - target) / tan^2(alpha_n) Convergence: |inv(alpha) - target| < 1e-12 Fallback: scipy.optimize.brentq on bracket [0, pi/2)
safe_inv(alpha): use Taylor expansion inv(alpha) ~ alpha^3/3 near alpha0;
guard against tan overflow near alphapi/2.
Module: m = d_0 / z [mm] Diametral Pitch: DP = 25.4 / m [teeth/inch]
Four concentric circles (x = profile shift coefficient): d_0 = m * z (pitch circle) d_b = d_0 * cos(alpha_0) (base circle) d_a = m * (z + 2 + 2x) (addendum circle) d_f = m * (z - 2.5 + 2x) (dedendum circle)
Tooth height: h_a = m * (1 + x) addendum h_f = m * (1.25 - x) dedendum c = 0.25 * m clearance (ISO 54 / AGMA default) h = 2.25 * m total height
Pitch: p = pi * m circular pitch p_b = pi * m * cos(alpha_0) base pitch
Tooth thickness at pitch circle: s_0 = m * (pi/2 + 2xtan(alpha_0))
Tooth thickness at arbitrary radius r (diameter d): s = d * (s_0/d_0 + inv(alpha_0) - inv(alpha_r)) where alpha_r = arccos(r_b / r)
Center distance (standard): a_0 = m*(z_1 + z_2)/2
Backlash (ISO 1328 / AGMA 2002): j ~ (0.02 to 0.05) * m
Purpose: prevent undercut, adjust center distance, optimize contact ratio.
Undercut condition: z < z_min = 2 / sin^2(alpha_0) alpha_0 = 20 deg => z_min = 17
Minimum shift (undercut prevention): x_min = (z_min - z) / z_min = 1 - z*sin^2(alpha_0)/2
Maximum shift (pointed tooth prevention): s_a at tip -> 0; practical warning when s_a < 0.3*m Solve numerically via bisection.
Changed parameters under shift: d_a = m*(z + 2 + 2x) d_f = m(z - 2.5 + 2x) s_0 = m(pi/2 + 2xtan(alpha_0)) UNCHANGED: d_0 = mz, d_b = d_0cos(alpha_0)
Operating pressure angle (gear pair with x_1, x_2): inv(alpha_w) = inv(alpha_0) + 2*(x_1 + x_2)*tan(alpha_0) / (z_1 + z_2)
Operating center distance: a_w = m*(z_1 + z_2)cos(alpha_0) / (2cos(alpha_w))
Contact ratio: epsilon = (sqrt(r_a1^2 - r_b1^2) + sqrt(r_a2^2 - r_b2^2) - a_wsin(alpha_w)) / (pim*cos(alpha_0)) Recommended: epsilon >= 1.2
Extreme tooth counts (z < 5): z=1,2 physically impossible at x=0; z=3-4 require special design; practical lower bound z >= 5 (KHK).
sigma_b = W_t / (F * m * Y)
W_t = 2T / d_0 = 2T / (m*z) tangential load [N] F = face width [mm] Y = Lewis form factor (20 deg standard tooth):
z: 12 14 17 20 24 30 40 60 inf(rack) Y: 0.245 0.276 0.303 0.322 0.337 0.359 0.389 0.422 0.485
WARNING: Y values for z > 60 are interpolated estimates beyond the source table.
For z=100: Y0.447, z=150: Y0.460, z=300: Y~0.478 (interpolated toward 0.485).
AGMA modified: sigma_b = W_t * K_o * K_v * K_s / (F * m * J) K_o: overload factor (1.0-2.0) K_v: dynamic factor (velocity-dependent) K_s: size factor (~1.0) J: AGMA geometry factor (improved Y)
sigma_H = Z_E * sqrt(W_t / (F * d_1) * (i+1)/i * 1/(sin(alpha) * cos(alpha)))
Z_E ~ 191 MPa^0.5 (steel-steel) i = z_2 / z_1 (gear ratio)
WARNING: For profile-shifted gear pairs, use alpha_w instead of alpha_0: alpha_w = arccos(m*(z_1+z_2)cos(alpha_0) / (2a_w)) Using alpha_0 for shifted gears gives INCORRECT contact stress.
Curvature radii at contact: rho_1 = r_1 * sin(alpha_w) rho_2 = r_2 * sin(alpha_w) 1/rho_eq = 1/rho_1 + 1/rho_2
Module conversion: m_t = m_n / cos(beta) transverse module tan(alpha_t) = tan(alpha_n) / cos(beta) transverse pressure angle d_0 = m_t * z = m_n * z / cos(beta) d_b = d_0 * cos(alpha_t) p_x = pi * m_n / sin(beta) axial pitch
Virtual tooth count: z_v = z / cos^3(beta) Use z_v for undercut check: z_v >= 17 => no undercut.
3D twist transformation (z_pos along axis): theta_z = z_pos * tan(beta) / r_0 x_3d = x_2dcos(theta_z) - y_2dsin(theta_z) y_3d = x_2dsin(theta_z) + y_2dcos(theta_z) z_3d = z_pos
Total twist: Delta_theta = face_width * tan(beta) / r_0
Contact ratios: epsilon_alpha: transverse (same as spur) epsilon_beta = b * sin(beta) / (pi * m_n) face contact ratio epsilon_gamma = epsilon_alpha + epsilon_beta total
Pitch cone angle (orthogonal axes, Sigma = 90 deg): tan(delta_1) = z_1 / z_2 delta_1 + delta_2 = 90 deg
Cone distance: R = mz_1 / (2sin(delta_1))
Tredgold approximation (virtual spur gear on back cone): z_v = z / cos(delta) Back cone radius: r_v = R * sin(delta) / cos(delta) = R * tan(delta)
3D: straight_bevel_tooth_3d_corrected() uses cone projection (NOT cylindrical offset). Tooth size scales linearly toward cone apex along face width.
Spiral bevel: ~100 Gleason parameters, OUT OF PROJECT SCOPE.
Addendum/dedendum REVERSED: d_a = m*(z - 2) (teeth point inward) d_f = m*(z + 2.5)
Center distance: a = m*(z_2 - z_1)/2 (external: z_1 + z_2)
Three interference conditions: involute, trochoid, assembly.
Rack tooth profile = straight lines at pressure angle alpha_0. Rack is the limit of involute gear as z -> infinity. Fillet: circular arc at root corners. Profile shift = rack reference line offset from gear center.
Key parameters: m_x: axial module m_n = m_x * cos(gamma) normal module q = d_1 / m_x diameter quotient (6-20) tan(gamma) = z_1 / q lead angle L = pi * m_x * z_1 lead d_1 = q * m_x worm pitch diameter d_2 = m_x * z_2 wheel pitch diameter a = m_x*(q + z_2)/2 center distance tan(alpha_n) = tan(alpha_x)*cos(gamma)
WARNING: Worm dedendum h_f1 = 1.2 * m_x (DIN 3975), NOT 1.25 like spur gears. d_f1 = d_1 - 2.4*m_x
Four worm types (DIN 3975): ZA (Archimedean): axial-section straight profile, simplest to manufacture ZI (Involute): involute helicoid from base cylinder ZN (Normal straight): straight profile in normal section ZK (Conical disk): profile from conical grinding disk
Worm wheel envelope generation: Coordinate transform M_21: worm frame -> wheel frame phi_2 = (z_1/z_2) * phi_1 (rolling constraint) Meshing condition: n_1^T * (dM_21/dphi_1) * r_1h = 0 Numerical: Brent method on theta grid for precise f=0 solution.
Efficiency: eta = tan(gamma) / tan(gamma + phi') phi' = arctan(mu / cos(alpha_n)) equivalent friction angle mu: friction coefficient (0.02-0.15)
Self-locking condition: gamma < phi' Optimal efficiency near gamma = 45 deg - phi'/2
Worm wheel profile shift: a = m_x*(q + z_2 + 2*xt2)/2 |xt2| <= 1.0 recommended
The root fillet is generated by the cutter tip corner trajectory during hobbing. Fetvaci (2010) 6-region pinion cutter model:
Primary trochoid: center E of cutter tip arc traces epitrochoid path. Secondary trochoid: offset by cutter tip fillet radius r_f along normal.
Coordinate transform M_gc: cutter frame -> gear frame Links cutter rotation phi_c to gear rotation phi_g = (N_c/N_g)*phi_c
Envelope condition: meshing equation f(phi_c) = 0 at contact points.
Standard fillet radius: rho_f ~ 0.38*m Connects involute start point to dedendum circle with tangent continuity. NOT suitable for precise stress analysis or CAD -- use Fetvaci for those.
Key function signatures used in this project:
involute_point(r_b: float, t: float) -> tuple[float, float] involute_function(alpha: float) -> float # inv(alpha) = tan(alpha) - alpha safe_inv(alpha: float) -> float # numerically stable inv() inv_involute(target_inv: float) -> float # Newton-Raphson + Brent fallback
tooth_profile(m, z, alpha0_deg=20.0, x=0.0, n_pts=40) -> np.ndarray Returns single tooth closed contour as (N, 2) array.
gear_profile(m, z, alpha0_deg=20.0, x=0.0, n_pts=40) -> list[np.ndarray] Returns list of z tooth arrays via circular pattern: angle_k = k * 2*pi/z
validate_tooth_count(z: int) -> bool profile_shift_limits(z, alpha0_deg=20.0) -> tuple[float, float] # (x_min, x_max) compute_contact_ratio(z1, z2, m, alpha_0, x1, x2) -> float full_gear_parameter_check(params) -> dict # integrated validation suite pointed_tooth_check(m, z, alpha0, x) -> bool # warns if s_a < 0.3*m
lewis_bending_stress(W_t, F, m, Y) -> float hertz_contact_stress(W_t, F, d1, u, alpha_w) -> float
straight_bevel_tooth_3d_corrected(...) # cone projection method internal_gear_profile(m, z, alpha0, x) -> np.ndarray
WormGearPair dataclass: m_x, z1, z2, q, alpha_x, mu, xt2 generate_za_worm_surface(...) # ZA Archimedean generate_zi_worm_surface(...) # ZI involute helicoid generate_worm_wheel_precise(...) # Brent method envelope
M_gc(phi_c, phi_g, r_c, r_g) -> np.ndarray # 4x4 homogeneous transform pinion_cutter_generate_gear_profile(...) # Fetvaci cutting simulation envelope_generate(...) # general-purpose envelope engine
8-step tooth generation algorithm: Step 1: Compute r_b, r_0, r_a, r_f Step 2: Determine t_start, t_tip Step 3: Generate involute coordinates Step 4: Compute half tooth angle theta_s = pi/(2z) + 2x*tan(alpha_0)/z Step 5: Rotate by theta_offset = theta_s + inv(alpha_0) Step 6: Root fillet (Fetvaci epitrochoid or circular arc) Step 7: Mirror for opposite flank: (x_L, y_L) = (x_R, -y_R) Step 8: Connect root arc between adjacent teeth
Circular pattern: DO NOT accumulate angles. Compute k * 2*pi/z directly per tooth index.
alpha_w vs alpha_0: Hertz formula uses alpha_0 ONLY for standard (x=0) gears. For shifted pairs, MUST use alpha_w = arccos(m*(z1+z2)cos(alpha_0)/(2a_w)).
Lewis Y table: z=30 -> Y=0.359 is the last reliable source value. Values for z > 60 are interpolated estimates approaching 0.485 (rack limit).
Fetvaci epitrochoid is the PROJECT STANDARD for root fillet. The circular arc approximation in M03 is for visualization only. Use Fetvaci for strength analysis, CAD, and cutting simulation.
Worm dedendum: h_f1 = 1.2*m_x (DIN 3975). Do NOT use 1.25 (spur/helical value).
Backlash: j ~ (0.02 to 0.05)*m per ISO 1328 / AGMA 2002.
Bevel gear 3D: Use cone projection (corrected version from R4 SF.2). Original R2 S4.4 had cylindrical offset error -- do not use.
Coordinate systems: S_g (gear), S_c (cutter), S_h (hob), S_global (fixed). All transforms use 4x4 homogeneous matrices. M_gc = cutter->gear, M_21 = worm->wheel.
Contact ratio epsilon >= 1.2 recommended. Below 1.0 is physically impossible for continuous motion.
Self-locking worm gears: gamma < phi' (lead angle < equivalent friction angle). Used in lifts, hoists where load must not back-drive.
Spiral bevel gears (~100 Gleason parameters) are OUT OF SCOPE for this project. Only straight bevel gears are implemented.
ZN worm type (Normal straight-sided): Formula is from a SINGLE SOURCE (2-star reliability). Partial verification via AGMA 6022-C93 and SDP-SI data only. For precision design: cross-validate with KISSsoft or equivalent before use. ZA (axial straight) is the most reliable type -- use as reference for validation.
Span micrometer measures W across k teeth in normal direction.
Spur gear: W = m * cos(alpha_0) * [pi*(k - 0.5) + z * inv(alpha_0)] + 2xm*sin(alpha_0)
Optimal span tooth count (prevent contact outside tip): k_max = z/pi * (pi/2 - inv(alpha_0) - 2xtan(alpha_0)/z) + 0.5 k = floor(k_max)
Helical gear (measure in normal plane): W_n = m_n * cos(alpha_n) * [pi*(k - 0.5) + z_v * inv(alpha_n)] z_v = z / cos^3(beta)
Insert pin diameter d_ball in tooth space; measure across-pins dimension M.
Contact pressure angle alpha_d: inv(alpha_d) = d_ball/(mzcos(alpha_0)) - inv(alpha_0) + pi/z + 2xtan(alpha_0)/z Solve alpha_d via inv_involute() Newton-Raphson (see Section 7).
Even tooth count: M = d_0 * cos(alpha_0) / cos(alpha_d) + d_ball
Odd tooth count: M = d_0 * cos(alpha_0) * cos(90 deg / z) / cos(alpha_d) + d_ball
Ideal pin diameter (contact near pitch circle): d_ball_ideal = m * cos(alpha_0) / cos(alpha_d) * pi/z
Python signatures (from M10): compute_span_measurement(m, z, alpha0, x, k=None) -> tuple[float, int] # (W, k_used) compute_overpin_measurement(m, z, alpha0, x, d_ball) -> float # M ideal_pin_diameter(m, z, alpha0, x=0.0) -> float
z: tooth count (z1: driver, z2: driven) m: module (m_n: normal, m_t: transverse, m_x: axial) alpha_0: standard pressure angle (typically 20 deg) alpha_w: working/operating pressure angle t: involute parameter (roll angle) inv(): involute function r_0: pitch radius = mz/2 r_b: base radius = r_0cos(alpha_0) r_a: tip radius r_f: root radius x: profile shift coefficient beta: helix angle (helical gears) gamma: lead angle (worm gears) delta: pitch cone angle (bevel gears)