You are not logged in.

Dear visitor, welcome to krpano.com Forum. If this is your first visit here, please read the Help. It explains in detail how this page works. To use all features of this page, you should consider registering. Please use the registration form, to register here or read more information about the registration process. If you are already registered, please login here.

Don Gamba

Beginner

  • "Don Gamba" started this thread

Posts: 10

Location: Stuttgart

  • Send private message

1

Saturday, May 11th 2019, 9:06pm

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 ...

Source code

1
2
3
4
5
6
7
8
9
10
11
var Rmin = -20
var Rmax = 200
var NumberChk = 4711
var NumberNew

// Langversion:
// NumberChk = Math.min( Rmax , NumberChk )
// NumberNew = Math.max( Rmin , NumberChk )

// Kurzversion (verschachtelt):
NumberNew = Math.min( Rmax , Math.max( Rmin , NumberChk ) )

In krpano "stecke" ich in der Langversion fest:

Source code

1
2
3
4
5
6
<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

This post has been edited 2 times, last edit by "Don Gamba" (May 13th 2019, 6:01am)


2

Saturday, May 11th 2019, 9:21pm

https://krpano.com/docu/actions/#clamp
*g* *whistling*


krpano actions haben keinen direkten rückgabe wert,
sondern benutzen (meist) den ersten parameter als zielvariable.
"verschachteln" wie in javascript geht daher nicht

ps. ausnahme der regel ist calc()

This post has been edited 3 times, last edit by "indexofrefraction" (May 11th 2019, 10:00pm)


Don Gamba

Beginner

  • "Don Gamba" started this thread

Posts: 10

Location: Stuttgart

  • Send private message

3

Saturday, May 11th 2019, 10:38pm

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.

This post has been edited 1 times, last edit by "Don Gamba" (May 11th 2019, 10:51pm)


Tuur

Sage

Posts: 3,124

Location: Netherlands

Occupation: Krpano custom coding / Virtual Tours / Photography / Musician / Recording engineer

  • Send private message

4

Saturday, May 11th 2019, 11:50pm

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*
http://www.virtualtuur.com
Skype:studiotuur

Don Gamba

Beginner

  • "Don Gamba" started this thread

Posts: 10

Location: Stuttgart

  • Send private message

5

Sunday, May 12th 2019, 2:49am

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

This post has been edited 4 times, last edit by "Don Gamba" (May 12th 2019, 4:10am)


toosten

Intermediate

Posts: 461

Location: Berlin

Occupation: freier Software-Entwickler ( HTML, JS, PHP, JSP, Flash, AS3, C++, Java, krpano, ---)

  • Send private message

6

Sunday, May 12th 2019, 11:48am

Ich würde sogar behaupten das Javascript schneller ist als krpanoSkript, weil dieses erst durch Javascript interpetiert werden muß.
Da nun Flash tot ist, benötigt man die Kompatibilität durch krpanoSkript vorerst nicht mehr.

Ich nutze noch beide Möglichkeiten.

Don Gamba

Beginner

  • "Don Gamba" started this thread

Posts: 10

Location: Stuttgart

  • Send private message

7

Sunday, May 12th 2019, 1:11pm

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

8

Monday, May 13th 2019, 11:05am

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

Don Gamba

Beginner

  • "Don Gamba" started this thread

Posts: 10

Location: Stuttgart

  • Send private message

9

Tuesday, May 14th 2019, 2:10pm

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

Quoted

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.

Quoted

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