Javascript Funktion zu AutoIt

  • Moin moin

    Ich glaube ich stehe heute Morgen echt aufm Schlauch.. Oder es liegt daran das es einfach noch zu früh dafür ist...
    Ich habe ne JavaScript Funktion, die ich gerne nach Autoit übersetzen möchte..

    Aber wie gesagt ich bin anscheinend heute morgen des mathischen Denkens noch nicht mächtig :D

    erst mal in javascript

    PHP
    document.write(test(125, 1, 400, 200));    
     function test(t, b, c, d) 
     {
    // t: current time
    // b: begInnIng value
    // c: change In value
    // d: duration
    if ((t/=d/2) < 1) return (c-1)/2*t*t*t*t + b;
    return -(c-1)/2 * ((t-=2)*t*t*t - 2) + b;
    }


    Ergebnis bei mir in javascipt ist 336.876953125

    das ganze in autoit...

    [autoit]

    ; t: current time
    ; b: begInnIng value
    ; c: change In value
    ; d: duration
    Func _easeInOutQuart( $t, $b, $c, $d)
    ; ((t/=d/2) < 1) return (c-1)/2*t*t*t*t + b;
    if ($t=($t/($d/2))) < 1 Then return (($c-1)/2*$t*$t*$t*$t + $b)
    ;-(c-1)/2 * ((t-=2)*t*t*t - 2) + b;
    return -(($c-1)/2 * ((($t=$t-2)*$t*$t*$t) - 2)) + $b
    EndFunc

    [/autoit]


    hier kommt aber 48706054688.5 raus...

    ich denke es liegt an der Umstellung vom -= und /=

    Naja ich Danke schon einmal...

    MFG chris :D

  • Offensichtlich gibts Probleme bei der korrekten Portierung des Zuweisungsoperators '=',
    da AutoIt in Fallunterscheidungen immer den Vergleichsoperator anwendet.
    Via Getter&Setter sollte es auf diese Weise möglich sein (call by reference!).
    Andernfalls musst du es in eine seperate Zeile auslagern:

    [autoit]

    Func _easeInOutQuart( $t, $b, $c, $d)
    $t /= $d/2
    if $t < 1 Then
    return (($c-1)/2*$t*$t*$t*$t + $b)
    Else
    $t -= 2
    Return -1*($c-1)/2 * ($t*$t*$t*$t-2)+ $b
    EndIf
    EndFunc

    [/autoit][autoit][/autoit][autoit]

    MsgBox(0,0,_easeInOutQuart(125,1,400,200))

    [/autoit]

    Wer immer nur das tut, was er bereits kann - wird auch immer nur das bleiben, was er bereits ist!

  • Vielen Dank XovoxKingdom für die Hilfe...
    Das mit dem umstellen war echt gut....

    Ich habe allerdings eben was krasses festellen müssen
    lässt man folgendes laufen...

    [autoit]

    $PI = ACos(-1)
    $degToRad = $PI/180
    For $i = 0 to 10

    [/autoit][autoit][/autoit][autoit]

    ConsoleWrite( cos($degToRad * 23)&@CRLF)
    Next

    [/autoit]

    .. bekommt man 10x den cos von 23
    ..lässt man aber

    [autoit]

    For $i = 0 to 10
    $PI = ACos(-1)
    $degToRad = $PI/180
    ConsoleWrite( cos($degToRad * 23)&@CRLF)
    Next

    [/autoit]

    kommt nach 6x kein Ergebnis zurück?

    0.92050485345244
    0.92050485345244
    0.92050485345244
    0.92050485345244
    0.92050485345244
    0.92050485345244
    -1.#IND
    -1.#IND
    -1.#IND
    -1.#IND
    -1.#IND

    was soll das???

    MFG Chris :D

  • Die Ursache oder ein Workaround kann ich dafür nicht geben,
    aber der Fehler ist laut Hilfedatei bekannt (implizit - aber manchmal gehts .. komisch).
    Der Fehler taucht selbst dann auf, wenn zwischen den aufrufen mehr Zeit liegt...
    ABER: bei -0.99 tauchte der Fehler bei mir nicht auf...
    Es steht in der Hilfedatei kein -1 <= x <= 1.

    Quelle : Hilfedatei - 'ACos'

    Zitat

    Remarks

    ACos(x) is mathematically defined only for -1 < x < 1, so ACos tends to return -1.#IND for other values of x.

    Wer immer nur das tut, was er bereits kann - wird auch immer nur das bleiben, was er bereits ist!