{"id":20916,"date":"2025-12-20T23:28:00","date_gmt":"2025-12-20T23:28:00","guid":{"rendered":"https:\/\/vibromera.eu\/?p=20916"},"modified":"2025-12-21T17:45:09","modified_gmt":"2025-12-21T17:45:09","slug":"online-vector-calculator-for-rotor-balancing","status":"publish","type":"post","link":"https:\/\/vibromera.eu\/sl\/uncategorized\/online-vector-calculator-for-rotor-balancing\/","title":{"rendered":"Spletni vektorski kalkulator za uravnote\u017eenje rotorja"},"content":{"rendered":"<div id=\"pl-20916\"  class=\"panel-layout\" ><div id=\"pg-20916-0\"  class=\"panel-grid panel-no-style\" ><div id=\"pgc-20916-0-0\"  class=\"panel-grid-cell\" ><div id=\"panel-20916-0-0-0\" class=\"widget_text so-panel widget widget_custom_html panel-first-child panel-last-child\" data-index=\"0\" ><h3 class=\"widget-title\">Vektorski kalkulator<\/h3><div class=\"textwidget custom-html-widget\"><!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\n  <style>\n    .vc-container {\n      font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif;\n      max-width: 1400px;\n      margin: 0 auto;\n      padding: 16px;\n      background: #f8fafc;\n      box-sizing: border-box;\n    }\n    .vc-container * {\n      box-sizing: border-box;\n    }\n    .vc-title {\n      text-align: center;\n      font-size: 24px;\n      font-weight: 700;\n      color: #1e3a8a;\n      margin: 0 0 24px 0;\n    }\n    .vc-inputs {\n      display: grid;\n      grid-template-columns: 1fr 1fr;\n      gap: 16px;\n      margin-bottom: 20px;\n    }\n    @media (max-width: 500px) {\n      .vc-inputs { grid-template-columns: 1fr; }\n    }\n    .vc-vector-box {\n      padding: 16px;\n      border-radius: 8px;\n      border: 1px solid #bfdbfe;\n      background: #fff;\n    }\n    .vc-vector-label {\n      font-weight: 500;\n      color: #1e3a8a;\n      margin-bottom: 12px;\n    }\n    .vc-fields {\n      display: flex;\n      gap: 16px;\n    }\n    .vc-field {\n      flex: 1;\n    }\n    .vc-field-label {\n      font-size: 12px;\n      color: #2563eb;\n      font-weight: 500;\n      display: block;\n      margin-bottom: 4px;\n    }\n    .vc-field input {\n      width: 100%;\n      padding: 12px;\n      border: 1px solid #bfdbfe;\n      border-radius: 4px;\n      text-align: center;\n      font-family: monospace;\n      font-size: 18px;\n    }\n    .vc-field input:focus {\n      outline: none;\n      border-color: #3b82f6;\n      box-shadow: 0 0 0 2px rgba(59,130,246,0.3);\n    }\n    .vc-diagram {\n      display: flex;\n      justify-content: center;\n      margin-top: 12px;\n    }\n    .vc-diagram svg {\n      background: #eff6ff;\n      border-radius: 4px;\n    }\n    .vc-operations {\n      background: #fff;\n      border-radius: 8px;\n      border: 1px solid #bfdbfe;\n      padding: 16px;\n      margin-bottom: 20px;\n    }\n    .vc-operations-label {\n      font-size: 14px;\n      font-weight: 500;\n      color: #1e3a8a;\n      margin-bottom: 12px;\n    }\n    .vc-ops-grid {\n      display: grid;\n      grid-template-columns: repeat(5, 1fr);\n      gap: 8px;\n    }\n    @media (max-width: 500px) {\n      .vc-ops-grid { grid-template-columns: repeat(3, 1fr); }\n    }\n    .vc-op-btn {\n      padding: 12px 8px;\n      border-radius: 4px;\n      border: 1px solid #bfdbfe;\n      background: #eff6ff;\n      color: #1d4ed8;\n      cursor: pointer;\n      text-align: center;\n      transition: all 0.2s;\n    }\n    .vc-op-btn:hover {\n      background: #dbeafe;\n    }\n    .vc-op-btn.active {\n      background: #2563eb;\n      color: #fff;\n      border-color: #2563eb;\n    }\n    .vc-op-icon {\n      font-size: 16px;\n      font-weight: 700;\n    }\n    .vc-op-name {\n      font-size: 11px;\n      margin-top: 4px;\n    }\n    .vc-scalar-row {\n      display: none;\n      margin-top: 16px;\n      justify-content: center;\n      align-items: center;\n      gap: 12px;\n    }\n    .vc-scalar-row.visible {\n      display: flex;\n    }\n    .vc-scalar-row label {\n      font-size: 14px;\n      color: #1d4ed8;\n    }\n    .vc-scalar-row input {\n      width: 80px;\n      padding: 8px;\n      border: 1px solid #bfdbfe;\n      border-radius: 4px;\n      text-align: center;\n      font-family: monospace;\n    }\n    .vc-calc-btn {\n      width: 100%;\n      padding: 14px;\n      background: #2563eb;\n      color: #fff;\n      font-size: 16px;\n      font-weight: 600;\n      border: none;\n      border-radius: 8px;\n      cursor: pointer;\n      transition: background 0.2s;\n    }\n    .vc-calc-btn:hover {\n      background: #1d4ed8;\n    }\n    .vc-result {\n      display: none;\n      margin-top: 20px;\n      padding: 20px;\n      background: #fff;\n      border-radius: 8px;\n      border: 2px solid #93c5fd;\n    }\n    .vc-result.visible {\n      display: block;\n    }\n    .vc-result-label {\n      font-size: 14px;\n      color: #2563eb;\n      font-weight: 500;\n      margin-bottom: 8px;\n    }\n    .vc-result-values {\n      display: flex;\n      justify-content: center;\n      align-items: center;\n      gap: 32px;\n    }\n    .vc-result-item {\n      text-align: center;\n    }\n    .vc-result-num {\n      font-size: 28px;\n      font-family: monospace;\n      font-weight: 700;\n      color: #1e3a8a;\n    }\n    .vc-result-unit {\n      font-size: 12px;\n      color: #3b82f6;\n      margin-top: 4px;\n    }\n    .vc-result-sep {\n      font-size: 24px;\n      color: #93c5fd;\n    }\n    .vc-result-cartesian {\n      text-align: center;\n      font-size: 14px;\n      color: #3b82f6;\n      margin-top: 12px;\n      padding-top: 12px;\n      border-top: 1px solid #eff6ff;\n    }\n    .vc-result-note {\n      text-align: center;\n      font-size: 14px;\n      color: #1d4ed8;\n      background: #eff6ff;\n      padding: 8px;\n      border-radius: 4px;\n      border: 1px solid #bfdbfe;\n      margin-top: 12px;\n    }\n    .vc-result-diagram {\n      display: flex;\n      justify-content: center;\n      margin-top: 12px;\n    }\n    .vc-help-toggle {\n      width: 100%;\n      margin-top: 24px;\n      padding: 12px;\n      background: #fff;\n      border: 1px solid #bfdbfe;\n      border-radius: 8px;\n      color: #1d4ed8;\n      font-size: 14px;\n      font-weight: 500;\n      cursor: pointer;\n      display: flex;\n      justify-content: space-between;\n      align-items: center;\n      transition: background 0.2s;\n    }\n    .vc-help-toggle:hover {\n      background: #eff6ff;\n    }\n    .vc-help-icon {\n      color: #93c5fd;\n    }\n    .vc-help-content {\n      display: none;\n      margin-top: 8px;\n      padding: 16px;\n      background: #fff;\n      border: 1px solid #bfdbfe;\n      border-radius: 8px;\n      font-size: 14px;\n      color: #1e3a8a;\n    }\n    .vc-help-content.visible {\n      display: block;\n    }\n    .vc-help-section {\n      margin-bottom: 20px;\n    }\n    .vc-help-section:last-child {\n      margin-bottom: 0;\n    }\n    .vc-help-heading {\n      font-weight: 600;\n      margin-bottom: 8px;\n    }\n    .vc-help-text {\n      color: #1d4ed8;\n      line-height: 1.5;\n    }\n    .vc-help-list {\n      color: #1d4ed8;\n      line-height: 1.6;\n      padding-left: 0;\n      list-style: none;\n    }\n    .vc-help-list li {\n      margin-bottom: 8px;\n    }\n    .vc-help-example {\n      background: #eff6ff;\n      padding: 12px;\n      border-radius: 4px;\n      border: 1px solid #bfdbfe;\n      color: #1e40af;\n      line-height: 1.6;\n    }\n    .vc-help-formulas {\n      font-family: monospace;\n      font-size: 12px;\n      color: #1d4ed8;\n      padding-top: 12px;\n      border-top: 1px solid #eff6ff;\n    }\n  <\/style>\n<\/head>\n<body>\n\n<div class=\"vc-container\">\n  <h1 class=\"vc-title\">Vektorski kalkulator<\/h1>\n\n  <div class=\"vc-inputs\">\n    <div class=\"vc-vector-box\">\n      <div class=\"vc-vector-label\">Vektor A<\/div>\n      <div class=\"vc-fields\">\n        <div class=\"vc-field\">\n          <label class=\"vc-field-label\">Masa, g<\/label>\n          <input type=\"number\" id=\"vc-mass1\" value=\"10\" step=\"0.1\" min=\"0\">\n        <\/div>\n        <div class=\"vc-field\">\n          <label class=\"vc-field-label\">Kot, stopinje<\/label>\n          <input type=\"number\" id=\"vc-angle1\" value=\"45\" step=\"1\">\n        <\/div>\n      <\/div>\n      <div class=\"vc-diagram\">\n        <svg id=\"vc-svg1\" width=\"80\" height=\"80\"><\/svg>\n      <\/div>\n    <\/div>\n\n    <div class=\"vc-vector-box\">\n      <div class=\"vc-vector-label\">Vektor B<\/div>\n      <div class=\"vc-fields\">\n        <div class=\"vc-field\">\n          <label class=\"vc-field-label\">Masa, g<\/label>\n          <input type=\"number\" id=\"vc-mass2\" value=\"8\" step=\"0.1\" min=\"0\">\n        <\/div>\n        <div class=\"vc-field\">\n          <label class=\"vc-field-label\">Kot, stopinje<\/label>\n          <input type=\"number\" id=\"vc-angle2\" value=\"180\" step=\"1\">\n        <\/div>\n      <\/div>\n      <div class=\"vc-diagram\">\n        <svg id=\"vc-svg2\" width=\"80\" height=\"80\"><\/svg>\n      <\/div>\n    <\/div>\n  <\/div>\n\n  <div class=\"vc-operations\">\n    <div class=\"vc-operations-label\">Operacija<\/div>\n    <div class=\"vc-ops-grid\">\n      <button class=\"vc-op-btn active\" data-op=\"add\">\n        <div class=\"vc-op-icon\">+<\/div>\n        <div class=\"vc-op-name\">Dodaj<\/div>\n      <\/button>\n      <button class=\"vc-op-btn\" data-op=\"subtract\">\n        <div class=\"vc-op-icon\">\u2212<\/div>\n        <div class=\"vc-op-name\">Od\u0161tej<\/div>\n      <\/button>\n      <button class=\"vc-op-btn\" data-op=\"opposite\">\n        <div class=\"vc-op-icon\">\u00b1180\u00b0<\/div>\n        <div class=\"vc-op-name\">Nasprotno<\/div>\n      <\/button>\n      <button class=\"vc-op-btn\" data-op=\"scale\">\n        <div class=\"vc-op-icon\">k\u00d7<\/div>\n        <div class=\"vc-op-name\">Lestvica<\/div>\n      <\/button>\n      <button class=\"vc-op-btn\" data-op=\"cartesian\">\n        <div class=\"vc-op-icon\">\u2192<\/div>\n        <div class=\"vc-op-name\">X, Y<\/div>\n      <\/button>\n    <\/div>\n    <div class=\"vc-scalar-row\" id=\"vc-scalar-row\">\n      <label>Mno\u017eitelj k:<\/label>\n      <input type=\"number\" id=\"vc-scalar\" value=\"2\" step=\"0.1\">\n    <\/div>\n  <\/div>\n\n  <button class=\"vc-calc-btn\" id=\"vc-calc-btn\">Izra\u010dunajte<\/button>\n\n  <div class=\"vc-result\" id=\"vc-result\">\n    <div class=\"vc-result-label\" id=\"vc-result-label\"><\/div>\n    <div class=\"vc-result-values\" id=\"vc-result-values\"><\/div>\n    <div class=\"vc-result-cartesian\" id=\"vc-result-cartesian\"><\/div>\n    <div class=\"vc-result-note\" id=\"vc-result-note\"><\/div>\n    <div class=\"vc-result-diagram\" id=\"vc-result-diagram\"><\/div>\n  <\/div>\n\n  <button class=\"vc-help-toggle\" id=\"vc-help-toggle\">\n    <span>Kako deluje ta kalkulator<\/span>\n    <span class=\"vc-help-icon\" id=\"vc-help-icon\">+<\/span>\n  <\/button>\n\n  <div class=\"vc-help-content\" id=\"vc-help-content\">\n    <div class=\"vc-help-section\">\n      <div class=\"vc-help-heading\">\u010cemu je namenjen ta kalkulator?<\/div>\n      <p class=\"vc-help-text\">\n        Ta kalkulator izvaja vektorske operacije z uporabo polarnih koordinat (velikosti in kota). Zasnovan je za aplikacije uravnote\u017eenja rotorjev, kjer se neravnovesje meri kot masa v dolo\u010denem kotnem polo\u017eaju. Kalkulator pomaga kombinirati ve\u010d od\u010ditkov neravnovesja, dolo\u010diti postavitev korekcijske ute\u017ei in pretvoriti med koordinatnimi sistemi.\n      <\/p>\n    <\/div>\n\n    <div class=\"vc-help-section\">\n      <div class=\"vc-help-heading\">Vhodna oblika<\/div>\n      <p class=\"vc-help-text\">\n        Vsak vektor je definiran z dvema vrednostma: maso (v gramih ali poljubnih enotah) in kotom (v stopinjah od 0 do 360). Referen\u010dni kot 0\u00b0 ka\u017ee navzgor (polo\u017eaj 12. ure), pri \u010demer se koti pove\u010dujejo v smeri urinega kazalca. To se ujema s konvencijo, ki jo uporablja ve\u010dina instrumentov za uravnote\u017eenje, kjer je fazna referenca obi\u010dajno ozna\u010dena na vrhu rotorja.\n      <\/p>\n    <\/div>\n\n    <div class=\"vc-help-section\">\n      <div class=\"vc-help-heading\">Operacije<\/div>\n      <ul class=\"vc-help-list\">\n        <li><strong>Se\u0161tevanje (+)<\/strong> \u2014 Zdru\u017ei dva vektorja v en sam rezultantni vektor. To uporabite, kadar morate najti skupno neravnovesje iz ve\u010d virov ali zdru\u017eiti dve korekcijski ute\u017ei v eno.<\/li>\n        <li><strong>Od\u0161tevanje (\u2212)<\/strong> \u2014 Izra\u010duna razliko med dvema vektorjema (A minus B). Uporabno za dolo\u010danje preostale neravnovesnosti po korekciji.<\/li>\n        <li><strong>Nasprotno (\u00b1180\u00b0)<\/strong> \u2014 Kotu vektorja A doda 180\u00b0. To vam da polo\u017eaj, kamor je treba namestiti korekcijsko ute\u017e.<\/li>\n        <li><strong>Lestvica (k\u00d7)<\/strong> \u2014 Pomno\u017ei maso s koeficientom k. To je bistveno pri ponovnem izra\u010dunu korekcijske mase za druga\u010den polmer monta\u017ee: m2 = m1 \u00d7 (r1 \/ r2).<\/li>\n        <li><strong>Kartezi\u010den (X, Y)<\/strong> \u2014 Pretvori polarne koordinate v kartezi\u010dne: X = m \u00d7 cos(kot), Y = m \u00d7 sin(kot).<\/li>\n      <\/ul>\n    <\/div>\n\n    <div class=\"vc-help-section\">\n      <div class=\"vc-help-heading\">Tipi\u010dne uporabe<\/div>\n      <ul class=\"vc-help-list\">\n        <li><strong>Uravnote\u017eenje v eni ravnini:<\/strong> Izmerite neravnovesje, s funkcijo Nasprotno poi\u0161\u010dite korekcijski kot, namestite ute\u017e in preverite.<\/li>\n        <li><strong>Kombiniranje ute\u017ei:<\/strong> Dve name\u0161\u010deni korekcijski ute\u017ei zamenjajte z eno enakovredno ute\u017ejo z uporabo se\u0161tevanja.<\/li>\n        <li><strong>Pretvorba polmera:<\/strong> Uporabite Skalno lestvico za ponovni izra\u010dun mase pri premikanju korekcijske ute\u017ei na drug polmer.<\/li>\n        <li><strong>Razdeljene ute\u017ei:<\/strong> Ko natan\u010den kot ni dosegljiv, porazdelite korekcijsko maso na dve sosednji lopatici.<\/li>\n      <\/ul>\n    <\/div>\n\n    <div class=\"vc-help-section\">\n      <div class=\"vc-help-heading\">Primer 1: Iskanje polo\u017eaja korekcijske ute\u017ei<\/div>\n      <div class=\"vc-help-example\">\n        Uravnote\u017eevalni instrument ka\u017ee neravnovesje <strong>15 gramov pri 72\u00b0<\/strong>.<br><br>\n        Vnesite vektor A: Masa = 15, Kot = 72<br>\n        Izberite <strong>Nasprotno (\u00b1180\u00b0)<\/strong> in kliknite Izra\u010dunaj.<br><br>\n        Rezultat: <strong>15 gramov pri 252\u00b0<\/strong><br><br>\n        Za izravnavo neravnovesja namestite 15-gramsko korekcijsko ute\u017e na polo\u017eaj 252\u00b0.\n      <\/div>\n    <\/div>\n\n    <div class=\"vc-help-section\">\n      <div class=\"vc-help-heading\">Primer 2: Zdru\u017eevanje dveh ute\u017ei v eno<\/div>\n      <div class=\"vc-help-example\">\n        Po ve\u010d ponovitvah uravnote\u017eenja imate na rotorju name\u0161\u010deni dve korekcijski ute\u017ei: \n        <strong>5 gramov pri 30\u00b0<\/strong> in . <strong>8 gramov pri 75\u00b0<\/strong>. \u017delite jih zamenjati z eno samo ute\u017ejo.<br><br>\n        Vnesite vektor A: Masa = 5, Kot = 30<br>\n        Vnesite vektor B: Masa = 8, Kot = 75<br>\n        Izberite <strong>Se\u0161tevanje (+)<\/strong> in kliknite Izra\u010dunaj.<br><br>\n        Rezultat: <strong>12,05 gramov pri 57,9\u00b0<\/strong><br><br>\n        Odstranite obe ute\u017ei in namestite eno 12-gramsko ute\u017e pod kotom pribli\u017eno 58\u00b0. Ta posamezna ute\u017e ustvari enak uravnote\u017eevalni u\u010dinek kot kombinacija obeh prvotnih ute\u017ei.\n      <\/div>\n    <\/div>\n\n    <div class=\"vc-help-section\">\n      <div class=\"vc-help-heading\">Primer 3: Spreminjanje korekcijskega polmera<\/div>\n      <div class=\"vc-help-example\">\n        Sistem za uravnote\u017eenje je izra\u010dunal popravek <strong>20 gramov<\/strong> za polmer <strong>100 mm<\/strong>. Vendar morate ute\u017e namestiti v polmeru <strong>80 mm<\/strong> zaradi prostorskih omejitev.<br><br>\n        Ker je u\u010dinek uravnote\u017eenja odvisen od produkta mase in polmera (m \u00d7 r = const), morate ponovno izra\u010dunati: k = 100 \/ 80 = 1,25<br><br>\n        Vnesite vektor A: Masa = 20, Kot = (va\u0161 korekcijski kot)<br>\n        Nastavite mno\u017eitelj k = 1,25<br>\n        Izberite <strong>Lestvica (k\u00d7)<\/strong> in kliknite Izra\u010dunaj.<br><br>\n        Rezultat: <strong>25 gramov<\/strong> pod istim kotom<br><br>\n        Pri manj\u0161em polmeru 80 mm potrebujete 25 gramov namesto 20 gramov, da dose\u017eete enako korekcijo.\n      <\/div>\n    <\/div>\n\n    <div class=\"vc-help-section\">\n      <div class=\"vc-help-heading\">Primer 4: Razdelitev te\u017ee med dve rezili<\/div>\n      <div class=\"vc-help-example\">\n        Zahtevana korekcija je <strong>10 gramov pri 110\u00b0<\/strong>, vendar lahko ute\u017ei pritrdite le na lopatice ventilatorja, ki se nahajajo na <strong>90\u00b0<\/strong> in . <strong>126\u00b0<\/strong> (5 rezil, 36\u00b0 narazen).<br><br>\n        Korekcijski kot 110\u00b0 le\u017ei med tema dvema reziloma. Da ugotovite, koliko mase gre na vsako rezilo, \n        uporabite natan\u010dno trigonometri\u010dno razdelitev (preprosta sorazmerna delitev mase po kotu je le pribli\u017eek in za ve\u010d odstotkov premalo popravi maso za uravnote\u017eenje):<br><br>\n        Kotna razdalja do lopatice pri 90\u00b0: \u03b1 = 110\u00b0 \u2212 90\u00b0 = 20\u00b0<br>\n        Kotna razdalja do lopatice pri 126\u00b0: \u03b2 = 126\u00b0 \u2212 110\u00b0 = 16\u00b0<br>\n        Kot med reziloma: \u03b1 + \u03b2 = 36\u00b0<br><br>\n        Ute\u017e na lopatici pri 90\u00b0: 10 \u00d7 sin(16\u00b0) \/ sin(36\u00b0) = <strong>4.69 g<\/strong><br>\n        Ute\u017e na lopatici pri 126\u00b0: 10 \u00d7 sin(20\u00b0) \/ sin(36\u00b0) = <strong>5.82 g<\/strong><br><br>\n        Za preverjanje uporabite se\u0161tevanje:<br>\n        Vektor A: masa = 4.69, kot = 90<br>\n        Vektor B: masa = 5.82, kot = 126<br>\n        Rezultat: <strong>10 gramov pri 110\u00b0<\/strong> \u2014 ustreza prvotni zahtevi.\n      <\/div>\n    <\/div>\n\n    <div class=\"vc-help-section\">\n      <div class=\"vc-help-formulas\">\n        <div class=\"vc-help-heading\">Formule<\/div>\n        Polarna v kartezi\u010dni sistem: X = m \u00d7 cos(a), Y = m \u00d7 sin(a)<br>\n        Kartezi\u010den v polarno: m = sqrt(X\u00b2 + Y\u00b2), a = atan2(Y, X)<br>\n        Korekcija polmera: m2 = m1 \u00d7 (r1 \/ r2)<br>\n        Razdeljene ute\u017ei (natan\u010dno): m1 = M \u00d7 sin(\u03b2) \/ sin(\u03b1 + \u03b2), m2 = M \u00d7 sin(\u03b1) \/ sin(\u03b1 + \u03b2), kjer je \u03b1 kotna razdalja od korekcijskega kota do lopatice 1, \u03b2 pa kotna razdalja do lopatice 2\n      <\/div>\n    <\/div>\n  <\/div>\n<\/div>\n\n<script>\n(function() {\n  let operation = 'add';\n\n  const mass1 = document.getElementById('vc-mass1');\n  const angle1 = document.getElementById('vc-angle1');\n  const mass2 = document.getElementById('vc-mass2');\n  const angle2 = document.getElementById('vc-angle2');\n  const scalarInput = document.getElementById('vc-scalar');\n  const scalarRow = document.getElementById('vc-scalar-row');\n  const calcBtn = document.getElementById('vc-calc-btn');\n  const resultDiv = document.getElementById('vc-result');\n  const resultLabel = document.getElementById('vc-result-label');\n  const resultValues = document.getElementById('vc-result-values');\n  const resultCartesian = document.getElementById('vc-result-cartesian');\n  const resultNote = document.getElementById('vc-result-note');\n  const resultDiagram = document.getElementById('vc-result-diagram');\n  const helpToggle = document.getElementById('vc-help-toggle');\n  const helpContent = document.getElementById('vc-help-content');\n  const helpIcon = document.getElementById('vc-help-icon');\n  const opBtns = document.querySelectorAll('.vc-op-btn');\n\n  function toCartesian(m, angleDeg) {\n    const rad = angleDeg * Math.PI \/ 180;\n    return { x: m * Math.cos(rad), y: m * Math.sin(rad) };\n  }\n\n  function toPolar(x, y) {\n    const m = Math.sqrt(x * x + y * y);\n    let a = Math.atan2(y, x) * 180 \/ Math.PI;\n    if (a < 0) a += 360;\n    return { mass: m, angle: a };\n  }\n\n  function formatNum(n, dec) {\n    dec = dec || 2;\n    if (Math.abs(n) < 0.0001) return '0';\n    return parseFloat(n.toFixed(dec)).toString();\n  }\n\n  function normalizeAngle(a) {\n    while (a < 0) a += 360;\n    while (a >= 360) a -= 360;\n    return a;\n  }\n\n  function drawVector(svgId, m, a, color) {\n    const svg = document.getElementById(svgId);\n    const cx = 40, cy = 40, r = 25;\n    const rad = (a - 90) * Math.PI \/ 180;\n    const ex = cx + r * Math.cos(rad);\n    const ey = cy + r * Math.sin(rad);\n    \n    svg.innerHTML = `\n      <circle cx=\"${cx}\" cy=\"${cy}\" r=\"30\" fill=\"none\" stroke=\"#bfdbfe\" stroke-width=\"1\"\/>\n      <line x1=\"${cx}\" y1=\"${cy}\" x2=\"${cx}\" y2=\"10\" stroke=\"#93c5fd\" stroke-width=\"1\"\/>\n      <text x=\"43\" y=\"9\" font-size=\"8\" fill=\"#3b82f6\">0<\/text>\n      ${m > 0 ? `<line x1=\"${cx}\" y1=\"${cy}\" x2=\"${ex}\" y2=\"${ey}\" stroke=\"${color}\" stroke-width=\"2\"\/>\n      <circle cx=\"${ex}\" cy=\"${ey}\" r=\"3\" fill=\"${color}\"\/>` : ''}\n      <circle cx=\"${cx}\" cy=\"${cy}\" r=\"2\" fill=\"#1e3a8a\"\/>\n    `;\n  }\n\n  function drawResultVector(m, a) {\n    const cx = 50, cy = 50, r = 35;\n    const rad = (a - 90) * Math.PI \/ 180;\n    const ex = cx + r * Math.cos(rad);\n    const ey = cy + r * Math.sin(rad);\n    \n    resultDiagram.innerHTML = `\n      <svg width=\"100\" height=\"100\" style=\"background:#eff6ff;border-radius:4px;\">\n        <circle cx=\"${cx}\" cy=\"${cy}\" r=\"40\" fill=\"none\" stroke=\"#bfdbfe\" stroke-width=\"1\"\/>\n        <line x1=\"${cx}\" y1=\"${cy}\" x2=\"${cx}\" y2=\"10\" stroke=\"#93c5fd\" stroke-width=\"1\"\/>\n        <line x1=\"${cx}\" y1=\"${cy}\" x2=\"90\" y2=\"${cy}\" stroke=\"#93c5fd\" stroke-width=\"1\"\/>\n        <text x=\"52\" y=\"8\" font-size=\"8\" fill=\"#3b82f6\">0<\/text>\n        <text x=\"92\" y=\"53\" font-size=\"8\" fill=\"#3b82f6\">90<\/text>\n        ${m > 0 ? `<line x1=\"${cx}\" y1=\"${cy}\" x2=\"${ex}\" y2=\"${ey}\" stroke=\"#1d4ed8\" stroke-width=\"2\"\/>\n        <circle cx=\"${ex}\" cy=\"${ey}\" r=\"4\" fill=\"#1d4ed8\"\/>` : ''}\n        <circle cx=\"${cx}\" cy=\"${cy}\" r=\"2\" fill=\"#1e3a8a\"\/>\n      <\/svg>\n    `;\n  }\n\n  function updateDiagrams() {\n    const m1 = parseFloat(mass1.value) || 0;\n    const a1 = normalizeAngle(parseFloat(angle1.value) || 0);\n    const m2 = parseFloat(mass2.value) || 0;\n    const a2 = normalizeAngle(parseFloat(angle2.value) || 0);\n    drawVector('vc-svg1', m1, a1, '#1d4ed8');\n    drawVector('vc-svg2', m2, a2, '#1d4ed8');\n  }\n\n  function calculate() {\n    const m1 = parseFloat(mass1.value) || 0;\n    const a1 = normalizeAngle(parseFloat(angle1.value) || 0);\n    const m2 = parseFloat(mass2.value) || 0;\n    const a2 = normalizeAngle(parseFloat(angle2.value) || 0);\n    const k = parseFloat(scalarInput.value) || 1;\n\n    const c1 = toCartesian(m1, a1);\n    const c2 = toCartesian(m2, a2);\n\n    let label = '', mass = 0, angle = 0, cart = null, note = '', isCartesian = false;\n\n    switch (operation) {\n      case 'add':\n        const sumX = c1.x + c2.x;\n        const sumY = c1.y + c2.y;\n        const sumP = toPolar(sumX, sumY);\n        label = 'Sum of vectors A + B';\n        mass = sumP.mass;\n        angle = sumP.angle;\n        cart = { x: sumX, y: sumY };\n        break;\n      case 'subtract':\n        const diffX = c1.x - c2.x;\n        const diffY = c1.y - c2.y;\n        const diffP = toPolar(diffX, diffY);\n        label = 'Difference A \u2212 B';\n        mass = diffP.mass;\n        angle = diffP.angle;\n        cart = { x: diffX, y: diffY };\n        break;\n      case 'opposite':\n        label = 'Correction weight position for vector A';\n        mass = m1;\n        angle = normalizeAngle(a1 + 180);\n        note = 'Place the correction mass at this angle to compensate for imbalance';\n        break;\n      case 'scale':\n        label = 'Vector A \u00d7 ' + k;\n        mass = m1 * k;\n        angle = a1;\n        break;\n      case 'cartesian':\n        label = 'Cartesian coordinates of vector A';\n        isCartesian = true;\n        cart = c1;\n        break;\n    }\n\n    resultDiv.classList.add('visible');\n    resultLabel.textContent = label;\n\n    if (isCartesian) {\n      resultValues.innerHTML = `\n        <div class=\"vc-result-item\">\n          <div class=\"vc-result-num\">X = ${formatNum(cart.x)}<\/div>\n        <\/div>\n        <div class=\"vc-result-item\">\n          <div class=\"vc-result-num\">Y = ${formatNum(cart.y)}<\/div>\n        <\/div>\n      `;\n      resultCartesian.style.display = 'none';\n      resultNote.style.display = 'none';\n      resultDiagram.innerHTML = '';\n    } else {\n      resultValues.innerHTML = `\n        <div class=\"vc-result-item\">\n          <div class=\"vc-result-num\">${formatNum(mass)}<\/div>\n          <div class=\"vc-result-unit\">grams<\/div>\n        <\/div>\n        <div class=\"vc-result-sep\">\/<\/div>\n        <div class=\"vc-result-item\">\n          <div class=\"vc-result-num\">${formatNum(angle, 1)}\u00b0<\/div>\n          <div class=\"vc-result-unit\">angle<\/div>\n        <\/div>\n      `;\n\n      if (cart) {\n        resultCartesian.textContent = 'X = ' + formatNum(cart.x) + ', Y = ' + formatNum(cart.y);\n        resultCartesian.style.display = 'block';\n      } else {\n        resultCartesian.style.display = 'none';\n      }\n\n      if (note) {\n        resultNote.textContent = note;\n        resultNote.style.display = 'block';\n      } else {\n        resultNote.style.display = 'none';\n      }\n\n      drawResultVector(mass, angle);\n    }\n  }\n\n  opBtns.forEach(function(btn) {\n    btn.addEventListener('click', function() {\n      opBtns.forEach(function(b) { b.classList.remove('active'); });\n      btn.classList.add('active');\n      operation = btn.getAttribute('data-op');\n      if (operation === 'scale') {\n        scalarRow.classList.add('visible');\n      } else {\n        scalarRow.classList.remove('visible');\n      }\n    });\n  });\n\n  calcBtn.addEventListener('click', calculate);\n\n  helpToggle.addEventListener('click', function() {\n    if (helpContent.classList.contains('visible')) {\n      helpContent.classList.remove('visible');\n      helpIcon.textContent = '+';\n    } else {\n      helpContent.classList.add('visible');\n      helpIcon.textContent = '\u2212';\n    }\n  });\n\n  mass1.addEventListener('input', updateDiagrams);\n  angle1.addEventListener('input', updateDiagrams);\n  mass2.addEventListener('input', updateDiagrams);\n  angle2.addEventListener('input', updateDiagrams);\n\n  updateDiagrams();\n})();\n<\/script>\n\n<\/body>\n<\/html><\/div><\/div><\/div><\/div><\/div>","protected":false},"excerpt":{"rendered":"<p>Vector Calculator Vector Calculator Vector A Mass, g Angle, deg Vector B Mass, g Angle, deg Operation + Add \u2212 Subtract \u00b1180\u00b0 Opposite k\u00d7 Scale \u2192 X, Y Multiplier k: Calculate How this calculator works + What is this calculator for? This calculator performs vector operations using polar coordinates (magnitude [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":20918,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"ai_generated_summary":"","footnotes":""},"categories":[1],"tags":[],"class_list":["post-20916","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/vibromera.eu\/sl\/wp-json\/wp\/v2\/posts\/20916","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vibromera.eu\/sl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/vibromera.eu\/sl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/vibromera.eu\/sl\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/vibromera.eu\/sl\/wp-json\/wp\/v2\/comments?post=20916"}],"version-history":[{"count":5,"href":"https:\/\/vibromera.eu\/sl\/wp-json\/wp\/v2\/posts\/20916\/revisions"}],"predecessor-version":[{"id":20927,"href":"https:\/\/vibromera.eu\/sl\/wp-json\/wp\/v2\/posts\/20916\/revisions\/20927"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/vibromera.eu\/sl\/wp-json\/wp\/v2\/media\/20918"}],"wp:attachment":[{"href":"https:\/\/vibromera.eu\/sl\/wp-json\/wp\/v2\/media?parent=20916"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vibromera.eu\/sl\/wp-json\/wp\/v2\/categories?post=20916"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vibromera.eu\/sl\/wp-json\/wp\/v2\/tags?post=20916"}],"curies":[{"name":"delovni list","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}