Asscalc Expressions: Unterschied zwischen den Versionen

Aus WiFX - The Karaoke Wiki for ASSCalc, NyuFX, Lua, AFX, Tenfex & Templater
Wechseln zu: Navigation, Suche
Zeile 91: Zeile 91:
  
 
Alphalevel 0 und 255 im wechsel:
 
Alphalevel 0 und 255 im wechsel:
- in p1loop:  - hex of MAX(onoff,0)
 
              - onoff=onoff*(-1)
 
  
- in p1h:    - onoff=255
+
- in p1loop:  hex of MAX(onoff,0)
 +
 
 +
              onoff=onoff*(-1)
 +
 
 +
- in p1h:    onoff=255
 
'''
 
'''
 
       |      SWITCH '(' expr ',' expr ',' expr ')'    { if( $3.value<0.5 )$$.value = $5.value; else $$.value = $7.value; }
 
       |      SWITCH '(' expr ',' expr ',' expr ')'    { if( $3.value<0.5 )$$.value = $5.value; else $$.value = $7.value; }

Version vom 29. Januar 2012, 04:03 Uhr

Expressions sind reine Mathefunktionen zum berechnen verschiedenster Dinge. Es sind die absoluten Basics an Mathe, aber die meißten Funktionen wie ein Bezier oder ähnliches lassen sich auch leicht damit beschreiben. Grundsätzlich beachtet Calc keine Punkt vor Strich Rechnung, sondern berechnet alles schön der Reihe nach. Um dies zu kontrollieren sollte man viel auf die () und Notepad C++ zurück greifen mit der Scriptvieweinstellung für Lua. Alle Mathefunktionen können in Variablen abgelegt werden oder direkt in anderen Expressions oder Commands wieder benutzt und verschachtelt werden. (Achtung Commands können nicht ineinander verschachtelt werden, dies gilt nur für Expressions!).


      |       expr '+' expr { $$.value = $1.value + $3.value }

Addition von zwei Variablen oder Zahlen.

Beispiel:

test1=test2+4

      |       expr '-' expr   { $$.value = $1.value - $3.value }

Subtraktion von zwei Variablen oder Zahlen.

Beispiel:

test1=test2-4

      |       expr '*' expr   { $$.value = $1.value * $3.value }

Multiplikation von zwei Variablen oder Zahlen.

Beispiel:

test1=test2*4

      |       expr '/' expr   { $$.value = $1.value / $3.value }

Division von zwei Variablen oder Zahlen.

Beispiel:

test1=test2/4

      |       expr '^' expr   { $$.value = pow($1.value, $3.value) }

Potenzieren mit zwei Variablen oder Zahlen. Um eine Wurzel 2. Grades zu ziehen schreibt man es als Potenz X^1/2 ; für die dritte Wurzel X^1/3 usw.

Beispiel:

test1=test2^4

      |       '(' expr ')'    { $$.value = $2.value }

Einklammern von Rechnungen.

Beispiel:

test1=test2-(test3*5)

      |       SIN '(' expr ')'    { $$.value = sin($3.value); }

Gibt den Sinus einer Variablen oder Zahl zurück.

Beispiel:

test1=SIN(Winkel)

      |       COS '(' expr ')'    { $$.value = cos($3.value); }

Gibt den Cosinus einer Variablen oder Zahl zurück.

Beispiel:

test1=COS(Winkel)

      |       INTROUND '(' expr ',' expr ')'    { $$.value = (double)(((int)($3.value+0.5)) % ((int)($5.value+0.5))); }

Bitte updaten.

      |       TRUNC '(' expr ')'    { $$.value = floor($3.value); }

Rundet eine Variable oder Zahl auf oder ab, je nachdem ob sie größer oder kleiner als 0.5 ist.

Beispiel:

test1=TRUNC(33.44) => 33

      |       SIGN '(' expr ')'    { $$.value = $3.value/(abs($3.value)+0.0001); }

Bitte updaten.

      |       MIN '(' expr ',' expr ')'    { if( $3.value<$5.value )$$.value = $3.value; else $$.value = $5.value; }

Macht eine Grenzenabfrage, welche eine Variable überprüft und wenn diese einen Wert überschreitet, wird der Wert auf die zweite Variable gesetzt, sprich die Variable ist immer MAXIMAL so groß wie der angegebene Wert.

      |       MAX '(' expr ',' expr ')'    { if( $3.value>$5.value )$$.value = $3.value; else $$.value = $5.value; }

Macht eine Grenzenabfrage, welche eine Variable Überprüft und wenn diese einen Wert unterschreitet, wird der Wert auf die zweite Angabe gesetzt, sprich die Variable ist immer MINIMAL so groß wie der angegebene Wert.

Beispiel:

Alphalevel 0 und 255 im wechsel:

- in p1loop: hex of MAX(onoff,0)

             onoff=onoff*(-1)

- in p1h: onoff=255

      |       SWITCH '(' expr ',' expr ',' expr ')'    { if( $3.value<0.5 )$$.value = $5.value; else $$.value = $7.value; }

Zu allererst, es benötigt 'immer eine zusätzlich Leerzeile unter der Funktion. Gilt allgemein bei Expression- und Command-Fehlern.

Wenn die erste Variable < 0.5 ist, dann ist der zurückgegebene Wert die zweite Variable, ansonsten die dritte Variable.

Beispiel:

wab=wab+1 wab=SWITCH(wab/7,wab,0)

Info: setzt die Variable wab beim erreichen des Wertes 4 auf 0 zurück, da 4/7 = 0,571

      |       PIXBUF '(' expr ',' expr ')'    { $$.value = get_pixbuf( $3.value, $5.value ); }

Überprüft an einer Position X,Y ob ein von ASSCalc gerenderter Silbenpixel schwarz oder weiß ist und gibt einen bolschen Wert zurück, welcher in LOWKILL als Pixelidentifiere genutzt werden kann.

Nochmal zur Info: loopvar und loopvar2 sind feste AssCalc Variablen, welche automatisch Pro Loop erhöht werden. Reset auf 0 pro P-Layer-Durchlauf

Beispiel:

LOWKILL( pixbuf(loopvar,loopvar2), 0.5 ) => entscheidet ob Code ausgeführt wird für einen Pixel oder nicht. Somit kann man einen Buchstaben leicht als Pixel nachbilden.


Hier noch ein Beitrag von OJ:

UPDATE:

hpsx=TRUNC(curx-nsizthisone*0.5)

Position X Seite Links => anfang Silbe X


hpsy=TRUNC(cury-nysizthisone*0.5)

Position Y Oben => Anfang Silbe Y


hpex=TRUNC(hpsx+2+nsizthisone)

Position X Seite Rechts => Ende Silbe X


hpey=TRUNC(hpsy+2+nysizthisone)

Position Y Unten => Ende Silbe


loopfile2 "p1 in.txt" ((hpex-hpsx),(hpey-hpsy))

=> loopfile2((Ende X - Anfang X),(Ende Y - Anfang Y))

=> Matrix aus (Silbenbreite,Silbenhöhe)

=> Erster X Achsendurchlauf 0 => loopvar gibt diesen Wert zurück und Zählt automatisch +1 wenn Y Reihe bei erreichen von Ende Y auf 0 resetet wird

=> Erster Y Achsendurchlauf Yposloop 0 -> Ende Y => loopvar2 gibt diesen Wert zurück und Zählt automatisch +1 pro Loopdurchlauf

und resetet sich automatisch bei erreichen von Ende Y


Jeder Pixel des Rechtecks, welches um die Silbe gezogen wurde wird nun auf seinen TRUE Wert überprüft, dh. asscalc generiert den Buchstaben konstant neu und überprüf ob er gefüllt ist oder nicht.


Die wird per Pixbuff überprüft:

pixbuf(loopvar,loopvar2)

=> Aktuelle Position in Achse X und Aktuelle Position in Achse Y ergibt den Standort im Rechteck

=> Ergibt dieser den Wert TRUE, wird von asscalc die Zahl 1 zurück gegeben

=> Bei FALSE wird der Wert 0 zurück gegeben

=> Dies wird mit dem Lowkill überprüft LOWKILL( pixbuf(loopvar,loopvar2), 0.5 )

=> LOWKILL( 1 >= 0.5 ) ergibt "NO", wird also ausgeführt, dh. ein Pixel wird generiert

=> LOWKILL( 0 >= 0.5 ) ergibt "YES", wird also NICHT ausgeführt, dh. kein Pixel wird generiert


In der Datei selbst muss noch die aktuelle Position gebildet werden

=> thisx=hpsx+loopvar+1 die +1 ist eine Korrektur da X nie passgenau sitzt

=> thisy=hpsy+loopvar2+18 die +18 ist eine Korrektur da Y nie passgenau sitzt


      |       '-' expr  %prec UMINUS { $$.value = -$2.value }

Setzt eine Variable auf Minus.

Beispiel:

var=(-var)

var=var*(-1)

var=-1

      |       IDENTIFIER { $$.value = get_identifier( $1 ); }

Variable ausgeben in Calc.

Beispiel:

var

      |       IDENTIFIER '[' expr ']' { $$.value = get_identifier_arr( $1, $3.value ); }

Array ausgeben in Calc.

Beispiel:

array[bla]

array[1]

      |       FINDINDEX '(' IDENTIFIER ',' expr ')' { $$.value = find_index_arr( $3, $5.value ); }

Update bitte.

      |       TEXTFINDBOOL IDENTIFIER { $$.value = textfind_identifier( $2.name ); }

Sucht in einer Line nach einem TEXT und gibt TRUE / 1 zurück, wenn er in dieser vorkommt. Siehe auch asscalc Commands zu diesem Thema

      |       NUMBER

Zahl ausgeben in Calc.


Beispiel:

1 234 0.3