{"id":24568,"date":"2026-08-10T02:29:29","date_gmt":"2026-08-10T02:29:29","guid":{"rendered":"https:\/\/www.mechstream.com\/?p=24568"},"modified":"2026-08-10T02:31:58","modified_gmt":"2026-08-10T02:31:58","slug":"gear-ratio-calculator","status":"publish","type":"post","link":"https:\/\/www.mechstream.com\/ar\/gear-ratio-calculator\/","title":{"rendered":"\u062d\u0627\u0633\u0628\u0629 \u0646\u0633\u0628\u0629 \u0627\u0644\u062a\u0631\u0648\u0633"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">The <strong>Gear Ratio Calculator<\/strong> is a practical engineering tool designed to quickly calculate the gear ratio between two meshing gears. By entering parameters such as the number of teeth on the driving gear and driven gear, users can easily determine the transmission ratio and better understand changes in rotational speed and torque. The <strong>Gear Ratio Calculator<\/strong> is ideal for gearbox design, mechanical transmission analysis, machinery development, and educational applications. It helps engineers, designers, technicians, and students reduce manual calculation errors, compare different gear combinations, and optimize transmission system performance. Whether you are designing a new gear system or evaluating an existing mechanism, this calculator provides a fast, accurate, and convenient way to determine gear ratios for efficient mechanical design.<\/p>\n\n\n\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n  <meta charset=\"UTF-8\">\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  <title>Gear Ratio Calculator<\/title>\n  <style>\n    \/* Scoped widget \u2014 safe for WordPress embed; does not affect page outside #grc-app *\/\n    #grc-app {\n      --grc-bg-primary: #f0f2f5;\n      --grc-bg-secondary: #ffffff;\n      --grc-bg-tertiary: #e8ecf1;\n      --grc-text-primary: #1a2332;\n      --grc-text-secondary: #5a6578;\n      --grc-text-muted: #8892a0;\n      --grc-accent: #2563eb;\n      --grc-accent-hover: #1d4ed8;\n      --grc-accent-light: rgba(37, 99, 235, 0.12);\n      --grc-success: #059669;\n      --grc-warning: #d97706;\n      --grc-danger: #dc2626;\n      --grc-border: #d1d9e6;\n      --grc-shadow-sm: 0 1px 3px rgba(26, 35, 50, 0.08);\n      --grc-shadow-md: 0 4px 16px rgba(26, 35, 50, 0.1);\n      --grc-shadow-lg: 0 8px 32px rgba(26, 35, 50, 0.12);\n      --grc-radius: 12px;\n      --grc-radius-sm: 8px;\n      --grc-gear1: #2563eb;\n      --grc-gear2: #059669;\n      --grc-input-bg: #ffffff;\n      box-sizing: border-box;\n      font-family: 'Segoe UI', system-ui, -apple-system, sans-serif;\n      font-size: 16px;\n      line-height: 1.5;\n      color: var(--grc-text-primary);\n      background: var(--grc-bg-primary);\n      max-width: 1000px;\n      margin: 0 auto;\n      padding: 1.5rem;\n      position: relative;\n      isolation: isolate;\n    }\n\n    #grc-app *,\n    #grc-app *::before,\n    #grc-app *::after {\n      box-sizing: border-box;\n    }\n\n    #grc-app[data-theme=\"dark\"] {\n      --grc-bg-primary: #0f1419;\n      --grc-bg-secondary: #1a2332;\n      --grc-bg-tertiary: #252f3f;\n      --grc-text-primary: #e8ecf1;\n      --grc-text-secondary: #a0aab8;\n      --grc-text-muted: #6b7788;\n      --grc-accent: #3b82f6;\n      --grc-accent-hover: #60a5fa;\n      --grc-accent-light: rgba(59, 130, 246, 0.18);\n      --grc-border: #2d3a4d;\n      --grc-shadow-sm: 0 1px 3px rgba(0, 0, 0, 0.3);\n      --grc-shadow-md: 0 4px 16px rgba(0, 0, 0, 0.4);\n      --grc-shadow-lg: 0 8px 32px rgba(0, 0, 0, 0.5);\n      --grc-input-bg: #1e2836;\n    }\n\n    #grc-app .grc-layout {\n      display: flex;\n      flex-direction: column;\n      gap: 1.5rem;\n    }\n\n    #grc-app .grc-card {\n      background: var(--grc-bg-secondary);\n      border: 1px solid var(--grc-border);\n      border-radius: var(--grc-radius);\n      box-shadow: var(--grc-shadow-md);\n      overflow: hidden;\n    }\n\n    #grc-app .grc-card-header {\n      padding: 1rem 1.25rem;\n      border-bottom: 1px solid var(--grc-border);\n      display: flex;\n      align-items: center;\n      justify-content: space-between;\n      gap: 0.5rem;\n      background: var(--grc-bg-tertiary);\n    }\n\n    #grc-app .grc-card-header-title {\n      display: flex;\n      align-items: center;\n      gap: 0.5rem;\n    }\n\n    #grc-app .grc-card-header h2 {\n      margin: 0;\n      padding: 0;\n      font-size: 0.95rem;\n      font-weight: 600;\n      text-transform: uppercase;\n      letter-spacing: 0.04em;\n      color: var(--grc-text-secondary);\n      line-height: 1.4;\n    }\n\n    #grc-app .grc-card-body { padding: 1.25rem; }\n\n    #grc-app .grc-theme-toggle {\n      background: var(--grc-bg-tertiary);\n      border: 1px solid var(--grc-border);\n      border-radius: var(--grc-radius-sm);\n      padding: 0.5rem 0.75rem;\n      cursor: pointer;\n      color: var(--grc-text-primary);\n      font-size: 1.1rem;\n      line-height: 1;\n      transition: background 0.2s;\n    }\n\n    #grc-app .grc-theme-toggle:hover { background: var(--grc-accent-light); }\n\n    #grc-app .grc-mode-selector {\n      display: flex;\n      gap: 0.5rem;\n      margin-bottom: 1.25rem;\n      flex-wrap: wrap;\n    }\n\n    #grc-app .grc-mode-btn {\n      flex: 1;\n      min-width: 180px;\n      padding: 0.75rem 1rem;\n      border: 2px solid var(--grc-border);\n      border-radius: var(--grc-radius-sm);\n      background: var(--grc-bg-secondary);\n      color: var(--grc-text-secondary);\n      font-size: 0.85rem;\n      font-weight: 500;\n      font-family: inherit;\n      cursor: pointer;\n      transition: all 0.2s;\n      text-align: center;\n    }\n\n    #grc-app .grc-mode-btn:hover {\n      border-color: var(--grc-accent);\n      color: var(--grc-accent);\n    }\n\n    #grc-app .grc-mode-btn.grc-active {\n      border-color: var(--grc-accent);\n      background: var(--grc-accent-light);\n      color: var(--grc-accent);\n      font-weight: 600;\n    }\n\n    #grc-app .grc-input-grid {\n      display: grid;\n      grid-template-columns: repeat(auto-fill, minmax(140px, 1fr));\n      gap: 1rem;\n    }\n\n    #grc-app .grc-input-group {\n      display: flex;\n      flex-direction: column;\n      gap: 0.35rem;\n    }\n\n    #grc-app .grc-input-group label {\n      font-size: 0.78rem;\n      font-weight: 600;\n      color: var(--grc-text-secondary);\n      text-transform: uppercase;\n      letter-spacing: 0.03em;\n    }\n\n    #grc-app .grc-input-group label sub { font-size: 0.7rem; }\n\n    #grc-app .grc-input-wrapper {\n      display: flex;\n      align-items: stretch;\n      border: 1px solid var(--grc-border);\n      border-radius: var(--grc-radius-sm);\n      overflow: hidden;\n      background: var(--grc-input-bg);\n      transition: border-color 0.2s, box-shadow 0.2s;\n    }\n\n    #grc-app .grc-input-wrapper:focus-within {\n      border-color: var(--grc-accent);\n      box-shadow: 0 0 0 3px var(--grc-accent-light);\n    }\n\n    #grc-app .grc-input-wrapper.grc-invalid {\n      border-color: var(--grc-danger);\n      box-shadow: 0 0 0 3px rgba(220, 38, 38, 0.15);\n    }\n\n    #grc-app .grc-input-wrapper input,\n    #grc-app .grc-input-wrapper select {\n      flex: 1;\n      border: none;\n      background: transparent;\n      padding: 0.6rem 0.75rem;\n      font-size: 0.95rem;\n      font-family: inherit;\n      color: var(--grc-text-primary);\n      outline: none;\n      min-width: 0;\n      margin: 0;\n      box-shadow: none;\n    }\n\n    #grc-app .grc-input-wrapper .grc-unit {\n      padding: 0.6rem 0.65rem;\n      background: var(--grc-bg-tertiary);\n      font-size: 0.75rem;\n      color: var(--grc-text-muted);\n      border-left: 1px solid var(--grc-border);\n      white-space: nowrap;\n      display: flex;\n      align-items: center;\n    }\n\n    #grc-app .grc-section-divider {\n      margin: 1.25rem 0 1rem;\n      padding-top: 1rem;\n      border-top: 1px dashed var(--grc-border);\n    }\n\n    #grc-app .grc-section-label {\n      font-size: 0.75rem;\n      font-weight: 600;\n      color: var(--grc-text-muted);\n      text-transform: uppercase;\n      letter-spacing: 0.05em;\n      margin-bottom: 0.75rem;\n    }\n\n    #grc-app .grc-presets {\n      display: flex;\n      flex-wrap: wrap;\n      gap: 0.5rem;\n    }\n\n    #grc-app .grc-preset-btn {\n      padding: 0.45rem 0.85rem;\n      border: 1px solid var(--grc-border);\n      border-radius: 20px;\n      background: var(--grc-bg-tertiary);\n      color: var(--grc-text-secondary);\n      font-size: 0.78rem;\n      font-weight: 500;\n      font-family: inherit;\n      cursor: pointer;\n      transition: all 0.2s;\n    }\n\n    #grc-app .grc-preset-btn:hover {\n      border-color: var(--grc-accent);\n      color: var(--grc-accent);\n      background: var(--grc-accent-light);\n    }\n\n    #grc-app .grc-results-grid {\n      display: grid;\n      grid-template-columns: repeat(auto-fill, minmax(160px, 1fr));\n      gap: 1rem;\n    }\n\n    #grc-app .grc-result-item {\n      background: var(--grc-bg-tertiary);\n      border-radius: var(--grc-radius-sm);\n      padding: 1rem;\n      border: 1px solid var(--grc-border);\n    }\n\n    #grc-app .grc-result-item.grc-highlight {\n      background: var(--grc-accent-light);\n      border-color: var(--grc-accent);\n    }\n\n    #grc-app .grc-result-label {\n      font-size: 0.72rem;\n      font-weight: 600;\n      color: var(--grc-text-muted);\n      text-transform: uppercase;\n      letter-spacing: 0.04em;\n      margin-bottom: 0.35rem;\n    }\n\n    #grc-app .grc-result-value {\n      font-size: 1.5rem;\n      font-weight: 700;\n      color: var(--grc-text-primary);\n      font-variant-numeric: tabular-nums;\n      line-height: 1.2;\n    }\n\n    #grc-app .grc-result-value.grc-small { font-size: 1.1rem; }\n\n    #grc-app .grc-result-sub {\n      font-size: 0.78rem;\n      color: var(--grc-text-secondary);\n      margin-top: 0.25rem;\n    }\n\n    #grc-app .grc-badge {\n      display: inline-block;\n      padding: 0.25rem 0.65rem;\n      border-radius: 20px;\n      font-size: 0.75rem;\n      font-weight: 600;\n      text-transform: uppercase;\n      letter-spacing: 0.03em;\n    }\n\n    #grc-app .grc-badge.grc-reduction { background: rgba(5, 150, 105, 0.15); color: var(--grc-success); }\n    #grc-app .grc-badge.grc-overdrive { background: rgba(217, 119, 6, 0.15); color: var(--grc-warning); }\n    #grc-app .grc-badge.grc-direct { background: rgba(37, 99, 235, 0.15); color: var(--grc-accent); }\n\n    #grc-app .grc-stage-info {\n      margin-top: 1rem;\n      padding: 0.75rem 1rem;\n      background: var(--grc-bg-tertiary);\n      border-radius: var(--grc-radius-sm);\n      font-size: 0.82rem;\n      color: var(--grc-text-secondary);\n      border-left: 3px solid var(--grc-accent);\n    }\n\n    #grc-app .grc-hidden { display: none !important; }\n\n    #grc-app .grc-results-card { display: none; }\n    #grc-app .grc-results-card.grc-visible { display: block; }\n\n    #grc-app .grc-toast-container {\n      position: absolute;\n      bottom: 1rem;\n      right: 1rem;\n      z-index: 10;\n      display: flex;\n      flex-direction: column;\n      gap: 0.5rem;\n      pointer-events: none;\n    }\n\n    #grc-app .grc-toast {\n      background: var(--grc-bg-secondary);\n      border: 1px solid var(--grc-danger);\n      border-left: 4px solid var(--grc-danger);\n      border-radius: var(--grc-radius-sm);\n      padding: 0.75rem 1rem;\n      box-shadow: var(--grc-shadow-lg);\n      font-size: 0.85rem;\n      color: var(--grc-text-primary);\n      max-width: 320px;\n      animation: grc-slideIn 0.3s ease;\n    }\n\n    @keyframes grc-slideIn {\n      from { transform: translateX(100%); opacity: 0; }\n      to { transform: translateX(0); opacity: 1; }\n    }\n\n    #grc-app .grc-formula-block {\n      margin-top: 1rem;\n      padding: 0.75rem 1rem;\n      background: var(--grc-bg-tertiary);\n      border-radius: var(--grc-radius-sm);\n      font-size: 0.8rem;\n      color: var(--grc-text-secondary);\n      font-family: 'Cambria Math', 'Times New Roman', serif;\n    }\n\n    #grc-app .grc-formula-block code {\n      font-family: inherit;\n      color: var(--grc-accent);\n      background: none;\n      padding: 0;\n    }\n\n    #grc-app .grc-compound-fields { display: none; }\n    #grc-app .grc-compound-fields.grc-visible { display: contents; }\n\n    #grc-app .grc-rpm-indicator {\n      margin-top: 0.75rem;\n      display: flex;\n      gap: 1.5rem;\n      flex-wrap: wrap;\n    }\n\n    #grc-app .grc-rpm-bar-item { flex: 1; min-width: 120px; }\n\n    #grc-app .grc-rpm-bar-label {\n      font-size: 0.72rem;\n      color: var(--grc-text-muted);\n      margin-bottom: 0.25rem;\n    }\n\n    #grc-app .grc-rpm-bar-track {\n      height: 6px;\n      background: var(--grc-bg-tertiary);\n      border-radius: 3px;\n      overflow: hidden;\n    }\n\n    #grc-app .grc-rpm-bar-fill {\n      height: 100%;\n      border-radius: 3px;\n      transition: width 0.3s;\n    }\n\n    #grc-app .grc-calc-actions {\n      display: flex;\n      justify-content: center;\n      margin-top: 1.25rem;\n    }\n\n    #grc-app .grc-calc-btn {\n      min-width: 180px;\n      padding: 0.75rem 2rem;\n      border: none;\n      border-radius: var(--grc-radius-sm);\n      background: var(--grc-accent);\n      color: #ffffff;\n      font-size: 1rem;\n      font-weight: 600;\n      font-family: inherit;\n      letter-spacing: 0.02em;\n      cursor: pointer;\n      box-shadow: var(--grc-shadow-sm);\n      transition: background 0.2s, transform 0.1s, box-shadow 0.2s;\n      text-decoration: none;\n    }\n\n    #grc-app .grc-calc-btn:hover,\n    #grc-app .grc-calc-btn:focus,\n    #grc-app .grc-calc-btn:active {\n      background: var(--grc-accent-hover);\n      color: #ffffff;\n      box-shadow: var(--grc-shadow-md);\n    }\n\n    #grc-app .grc-calc-btn:active {\n      transform: translateY(1px);\n    }\n\n    #grc-app .grc-optional-label {\n      font-weight: 400;\n      text-transform: none;\n    }\n  <\/style>\n<\/head>\n<body>\n  <!-- WordPress: embed everything inside #grc-app (this div + style + script) -->\n  <div id=\"grc-app\">\n    <div class=\"grc-layout\">\n      <div class=\"grc-card\">\n        <div class=\"grc-card-header\">\n          <div class=\"grc-card-header-title\">\n            <span class=\"grc-icon\">\ud83d\udcd0<\/span>\n            <h2>Input Parameters<\/h2>\n          <\/div>\n          <button type=\"button\" class=\"grc-theme-toggle\" id=\"grc-themeToggle\" aria-label=\"Toggle dark\/light mode\">\ud83c\udf19<\/button>\n        <\/div>\n        <div class=\"grc-card-body\">\n          <div class=\"grc-mode-selector\">\n            <button type=\"button\" class=\"grc-mode-btn grc-active\" data-mode=\"simple\">Simple Gear Pair (2 Gears)<\/button>\n            <button type=\"button\" class=\"grc-mode-btn\" data-mode=\"compound\">Compound Gear Train (4 Gears \/ 2-Stage)<\/button>\n          <\/div>\n\n          <div class=\"grc-input-grid\">\n            <div class=\"grc-input-group\">\n              <label for=\"grc-n1\">Driving Gear Teeth <sub>N\u2081<\/sub><\/label>\n              <div class=\"grc-input-wrapper\" id=\"grc-wrap-n1\">\n                <input type=\"number\" id=\"grc-n1\" value=\"20\" min=\"1\" step=\"1\">\n                <span class=\"grc-unit\">teeth<\/span>\n              <\/div>\n            <\/div>\n            <div class=\"grc-input-group\">\n              <label for=\"grc-n2\">Driven Gear Teeth <sub>N\u2082<\/sub><\/label>\n              <div class=\"grc-input-wrapper\" id=\"grc-wrap-n2\">\n                <input type=\"number\" id=\"grc-n2\" value=\"60\" min=\"1\" step=\"1\">\n                <span class=\"grc-unit\">teeth<\/span>\n              <\/div>\n            <\/div>\n\n            <div class=\"grc-compound-fields\" id=\"grc-compoundFields\">\n              <div class=\"grc-input-group\">\n                <label for=\"grc-n3\">Stage 2 Driver Teeth <sub>N\u2083<\/sub><\/label>\n                <div class=\"grc-input-wrapper\" id=\"grc-wrap-n3\">\n                  <input type=\"number\" id=\"grc-n3\" value=\"20\" min=\"1\" step=\"1\">\n                  <span class=\"grc-unit\">teeth<\/span>\n                <\/div>\n              <\/div>\n              <div class=\"grc-input-group\">\n                <label for=\"grc-n4\">Stage 2 Driven Teeth <sub>N\u2084<\/sub><\/label>\n                <div class=\"grc-input-wrapper\" id=\"grc-wrap-n4\">\n                  <input type=\"number\" id=\"grc-n4\" value=\"40\" min=\"1\" step=\"1\">\n                  <span class=\"grc-unit\">teeth<\/span>\n                <\/div>\n              <\/div>\n            <\/div>\n\n            <div class=\"grc-input-group\">\n              <label for=\"grc-rpm1\">Input Speed <sub>RPM\u2081<\/sub><\/label>\n              <div class=\"grc-input-wrapper\" id=\"grc-wrap-rpm1\">\n                <input type=\"number\" id=\"grc-rpm1\" value=\"1800\" min=\"0\" step=\"any\">\n                <span class=\"grc-unit\">RPM<\/span>\n              <\/div>\n            <\/div>\n            <div class=\"grc-input-group\">\n              <label for=\"grc-t1\">Input Torque <sub>T\u2081<\/sub> <span class=\"grc-optional-label\">(optional)<\/span><\/label>\n              <div class=\"grc-input-wrapper\" id=\"grc-wrap-t1\">\n                <input type=\"number\" id=\"grc-t1\" value=\"\" min=\"0\" step=\"any\" placeholder=\"\u2014\">\n                <select id=\"grc-torqueUnit\" aria-label=\"Torque unit\">\n                  <option value=\"Nm\">N\u00b7m<\/option>\n                  <option value=\"lbft\">lb\u00b7ft<\/option>\n                <\/select>\n              <\/div>\n            <\/div>\n            <div class=\"grc-input-group\">\n              <label for=\"grc-efficiency\">Efficiency <sub>\u03b7<\/sub><\/label>\n              <div class=\"grc-input-wrapper\" id=\"grc-wrap-eff\">\n                <input type=\"number\" id=\"grc-efficiency\" value=\"100\" min=\"0\" max=\"100\" step=\"any\">\n                <span class=\"grc-unit\">%<\/span>\n              <\/div>\n            <\/div>\n          <\/div>\n\n          <div class=\"grc-section-divider\">\n            <div class=\"grc-section-label\">Quick-load Presets<\/div>\n            <div class=\"grc-presets\" id=\"grc-presets\"><\/div>\n          <\/div>\n\n          <div class=\"grc-formula-block\">\n            <strong>Formulas:<\/strong>&nbsp;\n            <code>i = N<sub>drive<\/sub> \/ N<sub>driver<\/sub><\/code> &nbsp;|&nbsp;\n            <code>RPM\u2082 = RPM\u2081 \/ i<\/code> &nbsp;|&nbsp;\n            <code>T\u2082 = T\u2081 \u00d7 i \u00d7 \u03b7<\/code>\n          <\/div>\n\n          <div class=\"grc-calc-actions\">\n            <button type=\"button\" class=\"grc-calc-btn\" id=\"grc-calcBtn\">Calculate<\/button>\n          <\/div>\n        <\/div>\n      <\/div>\n\n      <div class=\"grc-card grc-results-card\" id=\"grc-resultsCard\">\n        <div class=\"grc-card-header\">\n          <div class=\"grc-card-header-title\">\n            <span class=\"grc-icon\">\ud83d\udcca<\/span>\n            <h2>Results Summary<\/h2>\n          <\/div>\n        <\/div>\n        <div class=\"grc-card-body\">\n          <div class=\"grc-results-grid\">\n            <div class=\"grc-result-item grc-highlight\">\n              <div class=\"grc-result-label\">Gear Ratio (i)<\/div>\n              <div class=\"grc-result-value\" id=\"grc-ratioDecimal\">\u2014<\/div>\n              <div class=\"grc-result-sub\" id=\"grc-ratioNormalized\">\u2014<\/div>\n            <\/div>\n            <div class=\"grc-result-item\">\n              <div class=\"grc-result-label\">Output Speed (RPM\u2082)<\/div>\n              <div class=\"grc-result-value\" id=\"grc-rpm2\">\u2014<\/div>\n              <div class=\"grc-result-sub\">rpm<\/div>\n            <\/div>\n            <div class=\"grc-result-item\">\n              <div class=\"grc-result-label\">Mechanical Advantage<\/div>\n              <div class=\"grc-result-value grc-small\" id=\"grc-advantageBadge\">\u2014<\/div>\n              <div class=\"grc-result-sub\" id=\"grc-advantageDesc\">\u2014<\/div>\n            <\/div>\n            <div class=\"grc-result-item\">\n              <div class=\"grc-result-label\">Output Torque (T\u2082)<\/div>\n              <div class=\"grc-result-value grc-small\" id=\"grc-t2\">\u2014<\/div>\n              <div class=\"grc-result-sub\" id=\"grc-t2Unit\">Enter T\u2081 to calculate<\/div>\n            <\/div>\n          <\/div>\n\n          <div class=\"grc-stage-info grc-hidden\" id=\"grc-stageInfo\"><\/div>\n\n          <div class=\"grc-rpm-indicator\">\n            <div class=\"grc-rpm-bar-item\">\n              <div class=\"grc-rpm-bar-label\">Input RPM\u2081<\/div>\n              <div class=\"grc-rpm-bar-track\"><div class=\"grc-rpm-bar-fill\" id=\"grc-rpmBar1\" style=\"background:var(--grc-gear1);width:100%\"><\/div><\/div>\n            <\/div>\n            <div class=\"grc-rpm-bar-item\">\n              <div class=\"grc-rpm-bar-label\">Output RPM\u2082<\/div>\n              <div class=\"grc-rpm-bar-track\"><div class=\"grc-rpm-bar-fill\" id=\"grc-rpmBar2\" style=\"background:var(--grc-gear2);width:33%\"><\/div><\/div>\n            <\/div>\n          <\/div>\n        <\/div>\n      <\/div>\n    <\/div>\n\n    <div class=\"grc-toast-container\" id=\"grc-toastContainer\"><\/div>\n  <\/div>\n\n  <script>\n    (function () {\n      'use strict';\n\n      var root = document.getElementById('grc-app');\n      if (!root) return;\n\n      var $ = function (sel) { return root.querySelector(sel); };\n      var $$ = function (sel) { return root.querySelectorAll(sel); };\n\n      var state = {\n        mode: 'simple',\n        theme: localStorage.getItem('grcTheme') || 'light',\n        results: null\n      };\n\n      var inputs = {\n        n1: $('#grc-n1'), n2: $('#grc-n2'), n3: $('#grc-n3'), n4: $('#grc-n4'),\n        rpm1: $('#grc-rpm1'), t1: $('#grc-t1'), efficiency: $('#grc-efficiency'),\n        torqueUnit: $('#grc-torqueUnit')\n      };\n\n      var wraps = {\n        n1: $('#grc-wrap-n1'), n2: $('#grc-wrap-n2'), n3: $('#grc-wrap-n3'), n4: $('#grc-wrap-n4'),\n        rpm1: $('#grc-wrap-rpm1'), t1: $('#grc-wrap-t1'), eff: $('#grc-wrap-eff')\n      };\n\n      function round2(v) { return Math.round(v * 100) \/ 100; }\n\n      function formatNum(v) {\n        if (v === null || v === undefined || isNaN(v)) return '\u2014';\n        return round2(v).toLocaleString('en-US', { minimumFractionDigits: 0, maximumFractionDigits: 2 });\n      }\n\n      function normalizeRatio(i) {\n        if (i >= 1) return formatNum(i) + ':1';\n        if (i > 0) return '1:' + formatNum(1 \/ i);\n        return '\u2014';\n      }\n\n      function lbftToNm(lbft) { return lbft * 1.35582; }\n      function nmToLbft(nm) { return nm \/ 1.35582; }\n\n      var toastTimer = null;\n      function showToast(msg) {\n        var container = $('#grc-toastContainer');\n        container.innerHTML = '';\n        var el = document.createElement('div');\n        el.className = 'grc-toast';\n        el.textContent = msg;\n        container.appendChild(el);\n        clearTimeout(toastTimer);\n        toastTimer = setTimeout(function () { container.innerHTML = ''; }, 4000);\n      }\n\n      function setInvalid(wrap, invalid) {\n        wrap.classList.toggle('grc-invalid', invalid);\n      }\n\n      function parsePositiveInt(val, fieldName) {\n        var n = parseInt(val, 10);\n        if (isNaN(n) || n <= 0 || !Number.isInteger(n) || String(n) !== String(parseFloat(val))) {\n          return { valid: false, msg: fieldName + ' must be a positive integer greater than 0.' };\n        }\n        return { valid: true, value: n };\n      }\n\n      function parseNonNegative(val, fieldName) {\n        var n = parseFloat(val);\n        if (isNaN(n) || n < 0) {\n          return { valid: false, msg: fieldName + ' must be a non-negative number.' };\n        }\n        return { valid: true, value: n };\n      }\n\n      function parseEfficiency(val) {\n        var n = parseFloat(val);\n        if (isNaN(n) || n < 0 || n > 100) {\n          return { valid: false, msg: 'Efficiency must be between 0% and 100%.' };\n        }\n        return { valid: true, value: n \/ 100 };\n      }\n\n      function parseOptionalTorque(val, unit) {\n        if (val === '' || val === null || val === undefined) return { valid: true, value: null };\n        var n = parseFloat(val);\n        if (isNaN(n) || n < 0) return { valid: false, msg: 'Input torque must be a non-negative number.' };\n        var nm = unit === 'lbft' ? lbftToNm(n) : n;\n        return { valid: true, value: nm, display: n, unit: unit };\n      }\n\n      function validateAndCalculate() {\n        var errors = [];\n        var v1 = parsePositiveInt(inputs.n1.value, 'N\u2081 (Driving gear teeth)');\n        var v2 = parsePositiveInt(inputs.n2.value, 'N\u2082 (Driven gear teeth)');\n        var vrpm = parseNonNegative(inputs.rpm1.value, 'RPM\u2081');\n        var veff = parseEfficiency(inputs.efficiency.value);\n        var vt1 = parseOptionalTorque(inputs.t1.value, inputs.torqueUnit.value);\n\n        setInvalid(wraps.n1, !v1.valid);\n        setInvalid(wraps.n2, !v2.valid);\n        setInvalid(wraps.rpm1, !vrpm.valid);\n        setInvalid(wraps.eff, !veff.valid);\n        setInvalid(wraps.t1, !vt1.valid);\n\n        if (!v1.valid) errors.push(v1.msg);\n        if (!v2.valid) errors.push(v2.msg);\n        if (!vrpm.valid) errors.push(vrpm.msg);\n        if (!veff.valid) errors.push(veff.msg);\n        if (!vt1.valid) errors.push(vt1.msg);\n\n        var v3 = { valid: true, value: 20 };\n        var v4 = { valid: true, value: 40 };\n\n        if (state.mode === 'compound') {\n          v3 = parsePositiveInt(inputs.n3.value, 'N\u2083 (Stage 2 driver teeth)');\n          v4 = parsePositiveInt(inputs.n4.value, 'N\u2084 (Stage 2 driven teeth)');\n          setInvalid(wraps.n3, !v3.valid);\n          setInvalid(wraps.n4, !v4.valid);\n          if (!v3.valid) errors.push(v3.msg);\n          if (!v4.valid) errors.push(v4.msg);\n        }\n\n        if (errors.length) {\n          showToast(errors[0]);\n          state.results = null;\n          hideResults();\n          return null;\n        }\n\n        var N1 = v1.value, N2 = v2.value;\n        var RPM1 = vrpm.value;\n        var eta = veff.value;\n        var i1, i2, iTotal, stage1Ratio, stage2Ratio;\n\n        if (state.mode === 'simple') {\n          iTotal = N2 \/ N1;\n          i1 = iTotal;\n          i2 = 1;\n          stage1Ratio = iTotal;\n          stage2Ratio = null;\n        } else {\n          var N3 = v3.value, N4 = v4.value;\n          i1 = N2 \/ N1;\n          i2 = N4 \/ N3;\n          iTotal = i1 * i2;\n          stage1Ratio = i1;\n          stage2Ratio = i2;\n        }\n\n        var RPM2 = RPM1 \/ iTotal;\n        var T1nm = vt1.value;\n        var T2nm = null;\n        if (T1nm !== null) T2nm = T1nm * iTotal * eta;\n\n        var advantage, advantageDesc;\n        if (Math.abs(iTotal - 1) < 0.001) {\n          advantage = 'direct';\n          advantageDesc = '1:1 direct drive \u2014 no speed or torque change';\n        } else if (iTotal > 1) {\n          advantage = 'reduction';\n          advantageDesc = 'Speed reduction \u2014 increased output torque';\n        } else {\n          advantage = 'overdrive';\n          advantageDesc = 'Overdrive \u2014 increased output speed, reduced torque';\n        }\n\n        var result = {\n          N1: N1, N2: N2, N3: v3.value, N4: v4.value,\n          RPM1: RPM1, RPM2: RPM2, iTotal: iTotal, i1: i1, i2: i2,\n          stage1Ratio: stage1Ratio, stage2Ratio: stage2Ratio,\n          T1nm: T1nm, T2nm: T2nm, T1display: vt1.display, torqueUnit: vt1.unit,\n          eta: eta, advantage: advantage, advantageDesc: advantageDesc\n        };\n\n        state.results = result;\n        showResults();\n        updateResultsUI(result);\n        return result;\n      }\n\n      function showResults() {\n        $('#grc-resultsCard').classList.add('grc-visible');\n      }\n\n      function hideResults() {\n        $('#grc-resultsCard').classList.remove('grc-visible');\n      }\n\n      function updateResultsUI(r) {\n        if (!r) return;\n\n        $('#grc-ratioDecimal').textContent = formatNum(r.iTotal);\n        $('#grc-ratioNormalized').textContent = normalizeRatio(r.iTotal);\n        $('#grc-rpm2').textContent = formatNum(r.RPM2);\n\n        var badgeMap = {\n          reduction: '<span class=\"grc-badge grc-reduction\">Speed Reduction<\/span>',\n          overdrive: '<span class=\"grc-badge grc-overdrive\">Overdrive<\/span>',\n          direct: '<span class=\"grc-badge grc-direct\">Direct Drive<\/span>'\n        };\n        $('#grc-advantageBadge').innerHTML = badgeMap[r.advantage];\n        $('#grc-advantageDesc').textContent = r.advantageDesc;\n\n        if (r.T2nm !== null) {\n          var unit = r.torqueUnit || 'Nm';\n          var t2display = unit === 'lbft' ? nmToLbft(r.T2nm) : r.T2nm;\n          var unitLabel = unit === 'lbft' ? 'lb\u00b7ft' : 'N\u00b7m';\n          $('#grc-t2').textContent = formatNum(t2display) + ' ' + unitLabel;\n          $('#grc-t2Unit').textContent = 'T\u2081 \u00d7 i \u00d7 \u03b7 = ' + formatNum(r.T1display) + ' \u00d7 ' + formatNum(r.iTotal) + ' \u00d7 ' + formatNum(r.eta * 100) + '%';\n        } else {\n          $('#grc-t2').textContent = '\u2014';\n          $('#grc-t2Unit').textContent = 'Enter T\u2081 to calculate';\n        }\n\n        var stageEl = $('#grc-stageInfo');\n        if (state.mode === 'compound') {\n          stageEl.classList.remove('grc-hidden');\n          stageEl.innerHTML =\n            '<strong>Stage 1:<\/strong> i\u2081 = N\u2082\/N\u2081 = ' + r.N2 + '\/' + r.N1 + ' = <strong>' + formatNum(r.stage1Ratio) + '<\/strong><br>' +\n            '<strong>Stage 2:<\/strong> i\u2082 = N\u2084\/N\u2083 = ' + r.N4 + '\/' + r.N3 + ' = <strong>' + formatNum(r.stage2Ratio) + '<\/strong><br>' +\n            '<strong>Overall:<\/strong> i = i\u2081 \u00d7 i\u2082 = <strong>' + formatNum(r.iTotal) + '<\/strong>';\n        } else {\n          stageEl.classList.add('grc-hidden');\n        }\n\n        var maxRpm = Math.max(r.RPM1, r.RPM2, 1);\n        $('#grc-rpmBar1').style.width = (r.RPM1 \/ maxRpm * 100) + '%';\n        $('#grc-rpmBar2').style.width = (r.RPM2 \/ maxRpm * 100) + '%';\n      }\n\n      var presets = [\n        { label: '3:1 Reduction', mode: 'simple', n1: 20, n2: 60, rpm1: 1800 },\n        { label: '1:2 Overdrive', mode: 'simple', n1: 40, n2: 20, rpm1: 3000 },\n        { label: '1:1 Direct Drive', mode: 'simple', n1: 30, n2: 30, rpm1: 1500 },\n        { label: '4:1 Compound', mode: 'compound', n1: 20, n2: 40, n3: 20, n4: 40, rpm1: 1200 },\n        { label: '10:1 Compound', mode: 'compound', n1: 15, n2: 45, n3: 15, n4: 45, rpm1: 1000 }\n      ];\n\n      function renderPresets() {\n        var container = $('#grc-presets');\n        container.innerHTML = presets.map(function (p, i) {\n          return '<button type=\"button\" class=\"grc-preset-btn\" data-idx=\"' + i + '\">' + p.label + '<\/button>';\n        }).join('');\n        container.addEventListener('click', function (e) {\n          var btn = e.target.closest('.grc-preset-btn');\n          if (!btn) return;\n          applyPreset(presets[parseInt(btn.dataset.idx, 10)]);\n        });\n      }\n\n      function applyPreset(p) {\n        setMode(p.mode);\n        inputs.n1.value = p.n1;\n        inputs.n2.value = p.n2;\n        if (p.n3) inputs.n3.value = p.n3;\n        if (p.n4) inputs.n4.value = p.n4;\n        inputs.rpm1.value = p.rpm1;\n      }\n\n      function setMode(mode) {\n        state.mode = mode;\n        $$('.grc-mode-btn').forEach(function (btn) {\n          btn.classList.toggle('grc-active', btn.dataset.mode === mode);\n        });\n        var cf = $('#grc-compoundFields');\n        if (mode === 'compound') {\n          cf.classList.add('grc-visible');\n        } else {\n          cf.classList.remove('grc-visible');\n        }\n      }\n\n      function setTheme(theme) {\n        state.theme = theme;\n        if (theme === 'dark') {\n          root.setAttribute('data-theme', 'dark');\n        } else {\n          root.removeAttribute('data-theme');\n        }\n        $('#grc-themeToggle').textContent = theme === 'dark' ? '\u2600\ufe0f' : '\ud83c\udf19';\n        localStorage.setItem('grcTheme', theme);\n      }\n\n      function bindEvents() {\n        $$('.grc-mode-btn').forEach(function (btn) {\n          btn.addEventListener('click', function () { setMode(btn.dataset.mode); });\n        });\n\n        $('#grc-calcBtn').addEventListener('click', validateAndCalculate);\n\n        $('#grc-themeToggle').addEventListener('click', function () {\n          setTheme(state.theme === 'dark' ? 'light' : 'dark');\n        });\n      }\n\n      setTheme(state.theme);\n      renderPresets();\n      bindEvents();\n    })();\n  <\/script>\n<\/body>\n<\/html>\n\n","protected":false},"excerpt":{"rendered":"<p>The Gear Ratio Calculator is a practical engineering tool designed to quickly calculate the gear ratio between two meshing gears. By entering parameters such as&#8230;<\/p>","protected":false},"author":2,"featured_media":24571,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"pmpro_default_level":"","_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_post_was_ever_published":false},"categories":[8520],"tags":[3673,3560,8548,8549],"class_list":["post-24568","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-mechanical-basic-component-design","tag-gear-calculator","tag-gear-design","tag-gear-ratio","tag-transmission-ratio","pmpro-has-access"],"acf":[],"jetpack_featured_media_url":"https:\/\/www.mechstream.com\/wp-content\/uploads\/2026\/08\/Gear-Ratio-Calculator.png","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.mechstream.com\/ar\/wp-json\/wp\/v2\/posts\/24568","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.mechstream.com\/ar\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.mechstream.com\/ar\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.mechstream.com\/ar\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.mechstream.com\/ar\/wp-json\/wp\/v2\/comments?post=24568"}],"version-history":[{"count":0,"href":"https:\/\/www.mechstream.com\/ar\/wp-json\/wp\/v2\/posts\/24568\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.mechstream.com\/ar\/wp-json\/wp\/v2\/media\/24571"}],"wp:attachment":[{"href":"https:\/\/www.mechstream.com\/ar\/wp-json\/wp\/v2\/media?parent=24568"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.mechstream.com\/ar\/wp-json\/wp\/v2\/categories?post=24568"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.mechstream.com\/ar\/wp-json\/wp\/v2\/tags?post=24568"}],"curies":[{"name":"\u0648\u0648\u0631\u062f\u0628\u0631\u064a\u0633","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}