@@ -24,7 +24,6 @@ import kotlin.math.sin
2424/* *
2525 * This generates variable frequency oscillation curves 
2626 * 
27-  * 
2827 */  
2928class  Cycles  {
3029    private  var  mPeriod =  floatArrayOf()
@@ -48,7 +47,14 @@ class Cycles {
4847        }
4948    }
5049
51-     //  @TODO: add description
50+     /* *
51+      * This adds a point in the cycle positions are from 0..1 
52+      * period represents the number of oscillations. 
53+      * The periods should typically: 
54+      * - add up to a whole number. 
55+      * - have a value at 0 and 1. 
56+      * After all points are added call normalize 
57+      */  
5258    fun  addPoint (position :  Float , period :  Float ) {
5359        val  len =  mPeriod.size +  1 
5460        var  j =  Arrays .binarySearch(mPosition, position)
@@ -66,6 +72,7 @@ class Cycles {
6672
6773    /* *
6874     * After adding point every thing must be normalized 
75+      * This must be called adding points 
6976     */  
7077    fun  normalize () {
7178        var  totalArea =  0f 
@@ -91,6 +98,10 @@ class Cycles {
9198        mNormalized =  true 
9299    }
93100
101+     /* *
102+      * Calculate the phase of the cycle given the accumulation of cycles up to 
103+      * that point in time. 
104+      */  
94105    private  fun  getP (time :  Float ): Float  {
95106        var  time =  time
96107        if  (time <  0 ) {
@@ -113,7 +124,11 @@ class Cycles {
113124        return  p
114125    }
115126
116-     //  @TODO: add description
127+     /* *
128+      * Get the value for time. (Time here is typically progress 0..1) 
129+      * Phase typically thought of as an angle is from 0..1 (not 0-360 or 0-2PI) 
130+      * This makes it mathematically more efficient 
131+      */  
117132    fun  getValue (time :  Float , phase :  Float ): Float  {
118133        val  angle =  phase +  getP(time) //  angle is / by 360
119134        return  when  (mType) {
@@ -122,7 +137,7 @@ class Cycles {
122137            TRIANGLE_WAVE  ->  1  -  abs((angle *  4  +  1 ) %  4  -  2 )
123138            SAW_WAVE  ->  (angle *  2  +  1 ) %  2  -  1 
124139            REVERSE_SAW_WAVE  ->  1  -  (angle *  2  +  1 ) %  2 
125-             COS_WAVE  ->  cos(mPI2 *  (phase  +   angle))
140+             COS_WAVE  ->  cos(mPI2 *  (angle))
126141            BOUNCE  ->  {
127142                val  x =  1  -  Math .abs(angle *  4  %  4  -  2 )
128143                1  -  x *  x
@@ -133,6 +148,9 @@ class Cycles {
133148        }
134149    }
135150
151+     /* *
152+      * Get the differential  dValue/dt 
153+      */  
136154    fun  getDP (time :  Float ): Float  {
137155        var  time =  time
138156        if  (time <=  0 ) {
0 commit comments