Was Sie zeigt schon nicht wirklich Sinus - der Bereich der Sinus zwischen -1 und +1. Sie wenden die lineare Funktion f(x) = (x+1)/2
an, um diesen Bereich zu ändern. Setzen Sie also eine andere Funktion zwischen den Sinus und das transformieren.
Um die Form zu ändern, benötigen Sie eine nichtlineare Funktion. So, hier ist eine kubische Gleichung Sie könnten versuchen, ...
g(x) = Ax^3 + Bx^2 + Cx + D
D = 0
C = p
B = 3 - 3C
A = 1 - (B + C)
Der Parameter p
einen Wert zwischen 0,0 und 9,0 gegeben werden soll. Wenn es 1,0 ist, ist g (x) die Identitätsfunktion (die Ausgabe ist die unmodifizierte Eingabe). Mit Werten zwischen 0.0 und 1.0 wird es dazu neigen, Ihre Sinuswelle zu "mästen" (schieben Sie sie von 0.0 weg und auf 1.0 oder -1.0), was Sie zu benötigen scheinen.
Ich einmal "entworfen" diese Funktion als eine Möglichkeit, "fraktale Wellenformen" zu bekommen. Unter Verwendung von Werten von zwischen 1,0 und 9,0 (und insbesondere zwischen etwa 3,0 und 6,0) ist die iterative Anwendung dieser Formel chaotisch. Ich habe die Idee aus der chaotischen Funktion der Schwankung der Bevölkerungsfluktuation von R. M. May gestohlen, aber das ist eine quadratische - ich wollte etwas symmetrisches, also brauchte ich eine kubische Funktion. Nicht wirklich relevant hier, und eine ziemlich schlimme Idee, wie es passiert. Obwohl Sie sicherlich chaotische Wellenformen bekommen, was das wirklich bedeutet, sind riesige Probleme mit Aliasing - Ändern Sie die Samplerate und Sie erhalten einen ganz anderen Sound. Aber ohne die Iteration wird dir das vielleicht das geben, was du brauchst.
Wenn Sie häufig genug mit p zwischen 0,0 und 1,0 iterieren, erhalten Sie eine Rechteckwelle mit leicht abgerundeten Ecken.
Wahrscheinlich können Sie nur einen Wert von p zwischen 0,0 und 1,0 wählen, wenden Sie diese Funktion einmal an, dann wenden Sie Ihre Funktion an, um den Bereich zu ändern, und Sie werden bekommen, was Sie wollen.
Übrigens gibt es bereits einen Kommentar, der einen Spickzettel von "Beschleunigungsfunktionen" vorschlägt. "Easing" ist ein Begriff aus der Animation, und Computeranimationssoftware verwendet zu diesem Zweck oft Bezier-Kurven - die gleichen Bezier-Kurven, die Vektorgrafiken oft verwenden. Bezier-Kurven kommen in quadratischen und kubischen Varianten vor, wobei kubische Varianten häufiger sind. Was das macht ist wahrscheinlich nicht so anders. Kubisches Bezier-Easing gibt Ihnen jedoch mehr Kontrolle - Sie können das "Ease-In" unabhängig vom "Ease-Out" steuern, wobei meine Funktion nur einen Parameter bereitstellt.
Wollen Sie damit sagen Sie etwas mehr wollen wie 'y = ((2 * sin (x))^2)/4' als 'y = sin (x)'? –
Sie könnten sich für den [Beschleunigungs-Spickzettel] (http://easings.net/) interessieren, der Ihnen helfen kann, eine Kurve mit zufriedenstellender Steilheit zu finden. Dann können Sie die Quelle für diese Kurve [hier] (http://www.robertpenner.com/easing/) nachschlagen. – Kevin
Jeder Tangente/Tangens würde tun. – moonwave99