Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Entwicklung
    4. Fehler in Blockly acos

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    Fehler in Blockly acos

    This topic has been deleted. Only users with topic management privileges can see it.
    • J
      JanD last edited by

      Hallo,
      ich wollte das Volumen eines liegenden Zylinders in Blockly berechnen und habe dabei einen Fehler in Blockly festgestellt.
      Gibt man in blockly acos 0,8 und wechselt dann zur JS Ansicht taucht folgendes auf "erg = Math.acos(0.8) / Math.PI * 180;". An dieser Stelle ist das Math.PI*180 zu viel und verursacht in der Folge einen Fehler den man an dieser Stelle noch gar nicht merkt. Wenn ich den Fehler mit "erg= (Math.acos(my_1_h_r) / Math.PI * 180) / (Math.PI * 180);" korregiere hilft das leider nicht wirklich, da trotzdem ein Rundungsfehler entsteht der dazu führt, dass mathematisch in einen 6000 Liter Tank plötzlich 6100 Liter passen.

      Ab hier das ganze zum nachvollziehen. Hier die Formel mit Beispielrechnung, die stimmt.

      Hier das fehlerhafte Blockly zum einfügen mit der gleichen Formel (leicht geändert für Blockly)

      var h, L, r, my_1_h_r, r_C2_B2, acos1_h_r, Teil_1, test, r_h, h_C2_B2, my_2_r_h, my_2_r_h_h_C2_B2, w_aus_2_r_h_h_C2_B2, Teil_2, ZwE, Erg;
      
      
      schedule("*/5 * * * * *", function () {
        h = 158;
        L = 340;
        r = 79;
        // Erg = L * ((r²*arccos (1-(h/r))-((r-h)*Wurzel(2*r*h(-h²)))))
        // Teil 1 (r²*arccos (1-(h/r))
        my_1_h_r = 1 - h / r;
        r_C2_B2 = r * r;
        acos1_h_r = (Math.acos(my_1_h_r) / Math.PI * 180) / (Math.PI * 180);
        Teil_1 = r_C2_B2 * acos1_h_r;
        test = 19.6066797510539;
        // Teil 2 ((r-h)*Wurzel(2*r*h(-h²))))
        r_h = r - h;
        h_C2_B2 = h * h;
        my_2_r_h = 2 * r * h;
        my_2_r_h_h_C2_B2 = my_2_r_h - h_C2_B2;
        w_aus_2_r_h_h_C2_B2 = Math.sqrt(my_2_r_h_h_C2_B2);
        Teil_2 = r_h * w_aus_2_r_h_h_C2_B2;
        ZwE = Teil_1 - Teil_2;
        Erg = L * Teil_1;
        console.warn((String(Erg / 100) + '   von 6666,3L'));
      });
      
      

      Hier noch mal ein Nachbau in Java Script, der funktioniert und richtig rechnet

      var Erg , h , L , r;
      
      schedule("*/5 * * * * *", function () {
       
       h = 158;// - (getState("sonoff.0.Oel1.SR04_Distance").val); // Füllhöhe des liegenden Zylinders
       L = 340; // Länge des Zylinders
       r = 79; // Radius
      
       // Formel ********************************************************
       // Erg = L * ((r²*arccos * (1-(h/r))-((r-h)*Wurzel(2*r*h(-h²)))))
       // Prüfung https://www.scalesoft.de/math/tank/tank.html
       // ***************************************************************
      
       // Berechnung
       Erg = L * ((r * r * Math.acos(1 -(h / r)))-( r - h) * Math.sqrt(2 * r * h -(h * h)));
      
      //console.warn((String(Math.round((Erg / 1000)*10)/10) + '   von 6666,3L'));
      console.warn((String(Erg / 1000) + '   von 6666,3L'));
      });
      

      Ergebnis in Blockly trotz Korrektur "6754.344798888328 von 6666,3L"
      Richtiges Ergebnis in Java Script sowie auf der Webpage "6666.271115358326 von 6666,3L"

      Könnte man das ganze prüfen und ggf. korregieren?

      1 Reply Last reply Reply Quote 0
      • First post
        Last post

      Support us

      ioBroker
      Community Adapters
      Donate

      407
      Online

      31.9k
      Users

      80.2k
      Topics

      1.3m
      Posts

      acos
      1
      1
      175
      Loading More Posts
      • Oldest to Newest
      • Newest to Oldest
      • Most Votes
      Reply
      • Reply as topic
      Log in to reply
      Community
      Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
      The ioBroker Community 2014-2023
      logo