Wie können wir einen Zähler ohne Bedingungen erhöhen und dann dekrementieren?

8

Ich suche nach einer cleveren Möglichkeit, eine Zählervariable zu erhöhen und dann zu dekrementieren. Ich möchte, dass die Zählervariable bei einem niedrigen Wert beginnt und zu einem höheren Wert erhöht wird. Sobald er den höheren Wert erreicht, dekrementiert der Zähler, bis er den niedrigeren Wert erreicht. Sobald es den niedrigeren Wert erreicht, erhöht der Zähler wieder auf den höheren Wert ... Ich denke, Sie bekommen den Punkt.

Ich arbeite an einer Leinwandanimation , wo ich etwas Cleverness einsetzen möchte, ohne if oder andere bedingte Tests:

Hier ist die Bedingungslogik, die die Zählervariable behandelt:

%Vor%

Anfangs dachte ich, ich könnte modulo benutzen. Die Modulo-Division setzt den Zähler jedoch nur auf den niedrigeren Wert zurück - er dekrementiert den Zähler nicht, wenn er den höchsten Wert erreicht hat.

%Vor%

Ich bin mir sicher, dass es einen Weg geben muss, dies ohne bedingte Tests zu tun. Unterstellt man einen unteren Wert von 0 und einen oberen Wert von 10, sollte die Methode folgendes ausgeben:

%Vor%     
luk3thomas 27.10.2014, 15:16
quelle

2 Antworten

15

Zuerst schauen wir uns einige Wellen an!

Hallo Wellen!

Können Sie den Ihren Anforderungen entsprechenden identifizieren?

Wenn Sie Dreiecks-Welle erraten haben, haben Sie recht!

Die Dreieckswelle oszilliert mit einer gleichmäßigen Steigung, bis sie ein Minimum oder Maximum erreicht, und dann wird die Steigung umgekehrt.

Zwei Dinge, die hier erarbeitet werden sollten:

  • Der Ursprung der Funktion beginnt in der Mitte der Welle
  • oszilliert die Welle von x zu -x

Wir möchten die Ausgabe bei 0 starten und nur positive Werte enthalten

%Vor%

Lass es uns ausprobieren

%Vor%

Ausgabe

%Vor%

Wenn wir also triangle(i, 10) aufrufen, ist 10 die "Periode". Dies sagt uns, wie viele Schritte wir in unserer Funktion haben wollen, bevor es wiederholt wird.

Eine Periode von 6 würde uns 6 Werte geben, 0, 1, 2, 3, 2, 1

Eine Periode von 4 würde uns 4 Werte geben, 0, 1, 2, 1 etc

Wenn Sie von 0-9 wechseln möchten, benötigen Sie einen Zeitraum von 20

    
user633183 27.10.2014, 15:59
quelle
2

Hier ist eins:

%Vor%

was dir geben wird

%Vor%

Natürlich gibt es dort eine Bedingung, die nur als bitweise Operation versteckt ist.

Eine andere Möglichkeit ist ein Dreieckswellenzähler:

%Vor%

was macht

%Vor%

wieder gibt es eine versteckte Bedingung, die die Bits umdreht, wenn es halbwegs ist.

    
hcs 27.10.2014 16:30
quelle

Tags und Links