Verschachteln von Math.min und Math.max. [solved]

  • Salü an alle!
    Folgende Problemstellung:
    Eine vorhande Zahl soll einem Wertebereich (Range) zugewiesen werden.
    Ist die Zahl zu klein, wird sie auf den Minimalwert der Range angehoben, ist sie zu groß, wird sie auf den Maximalwert der Range herabgesetzt.
    Beispiel: Range -20 bis +200
    Zahl = 175 ... bleibt 175
    Zahl = 666 ... wird 200
    Zahl = -69 ... wird -20

    Umsetzung in Javascript ...


    In krpano "stecke" ich in der Langversion fest:

    Code
    <mayrange min="-20" max="200" nr_a="666" nr_b="111" />
    <action name="AdjustToRange" scope="local" keep="true">
        Math.min( xChk , mayrange.max , calc(mayrange.nr_a+mayrange.nr_b) );
        Math.max( xNew , mayrange.min , xChk );
        trace( 'NumberNew: ' , xNew );
    </action>


    Eine krpano-Script Kurzversion bekomme ich einfach nicht "gebacken".
    Hat jemand eine Idee, wie man es kompakter coden kann?

    Zusatzbemerkung:
    Das Problem klingt auf den ersten Augenblick trivial und man könnte denken "Was will der Typ eigentlich? Die eine Zeile mehr Code ist doch schnuppe!".
    Mir geht es aber ...
    1. noch oft um das Verständnis von krpano-Script
    2. um Dinge wie Code-Minimierung. Wenn ein solcher Code-Block statt in einer <action> z.B. in einem möglichst kompakten asyncloop untergebracht werden muss.

    Grüße, Don

  • Hallo indexofrefraction Du Engel ... abermals superschneller Feedback, danke!
    Ohweh, ich hatte clamp schon wieder total vergessen!
    clamp( anpasswert , minwert , maxwert ); ... Super Sache.
    Habe auch gleich herumexperimentiert.
    Die Math.min - Math.max - Methode scheint jedoch immer noch die Kompakteste zu sein.

  • Hi Don Gamba,

    The math stuff is great to use!
    Personally not my strongest point though, but works like a charm.
    Don't forget to option to use javascript actions in the xml.
    https://krpano.com/docu/xml/#action.js

    Tomato Tuur *g*
    *thumbsup*

  • Hi Tuur,
    yes, you're right. And that is my problem. I think 80% of my actions are written in JS.
    Often (because I'm used to it) it's less complicated than ... hm, what's the name for it? Ok, I call it krpScript now.
    Especially if you shrink the actions with tools like JSCompress (https://jscompress.com/) you can save a lot of memory.
    But in many situations I wonder if maybe writing some of these actions in krpScript could be faster in executing at the end.
    And sometimes krpScript seems to be the better solution for <action>s, anyway.
    And the question is ... what is faster at the end? Does somebody know? What does Klaus say? *smile*
    Cheers, Don

  • Hi toosten,
    ja, so denke ich auch. Wenn ich eine <action> in JS geschrieben habe, die sich einfach in krpScript umschreiben lässt und eher Viewer-bezogen ist, dann mache ich das auch.
    Denn schließlich beißt sich die Schlange ja in den eigenen Schwanz, wenn ich zunächst in JS einen krpano.call( '...' ) ausführe, der über krpScript im Anschluß wieder zu JS wird.
    Bei anderen <action>s, die eher weniger mit Viewer-Ansteuerung zu tun haben, oder falls ich mit Objekten und Arrays arbeite, wähle ich stets JS.
    Gruß, Don

  • Hi,

    Javascript Code ist natürlich schneller, da wie schon geschrieben der Interpreter-Schritt weg-fällt, allerdings bzgl. Performance wird das erst ab mehreren hundert Anweisungen pro Frame wichtig.

    Für die 'typischen' Anwendungen der Actions, z.B. dem Setup der Tour oder UI-Animationen und ähnlichem usw. sollte es damit noch keine Performance-Probleme geben.

    Und ich würde auch sagen bei bestimmten Dingen kommt mit den Actions mit weniger Code schneller und einfacher zum Ziel. Mit JS-only wäre viel mehr rundherum oder zusätzliche Frameworks notwendig .

    Man kann aber auch wie gesagt auch Javascript in vielfältiger Weise verwenden, z.B. alternativ oder zusätzlich als Ergänzung. Die krpano Actions selbst sind intern natürlich auch nur Javascript Funktionen und können von auch JS direkt aufrufen werden (d.h. ohne 'call'). Diesbezüglich hat es in der neuen Version auch noch einige Verbesserungen gegeben und ich plane noch Beispiele und Dokumentationen dazu bereit zu stellen.

    Schöne Grüße,
    Klaus

  • Hallo Klaus,
    danke für die ausführliche Info!


    Zitat

    Klaus: Und ich würde auch sagen bei bestimmten Dingen kommt mit den Actions mit weniger Code schneller und einfacher zum Ziel. Mit JS-only wäre viel mehr rundherum oder zusätzliche Frameworks notwendig.

    Ja, ich denke, da stimmen alle zu. Man merkt ja irgendwann beim Programmieren "uiuiui", jetzt wird's "umständlicher", da sollte ich doch lieber in JS coden ... bzw. genau anders herum besser in krpScript.


    Zitat

    Klaus: Diesbezüglich hat es in der neuen Version auch noch einige Verbesserungen gegeben und ich plane noch Beispiele und Dokumentationen dazu bereit zu stellen.

    Schätze mal, jetzt sind wir alle gespannt und in Vorfreude auf das, was nächste Version an Neuerungen mit sich bringt. *smile*
    Grüße, Don

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!