Idea:- Generate Three Phase to give an RGB value to get rainbow fades
 A lot of  Rainbow fades use HUE and a Hue2RGB() function.
 Could I use N Darwoods's Three Phase method? yes - but you need to clip.
 
  This is based on a Wireless World article 
   by N Darwood in November 1982.
 
  Itterate these each time slice:-
 
  A=A+n*(B-C)
  B=B+n*(C-A)
  C=C+n*(A-B)
 
 If A, B, C map to R, G, B 
 
 If these clip, and go greater than 100% and the colours are pleasing.
 
 The SVG rgb(r%,b%,g%) function clips the values to 0% to 100%. 
 
  
Graph '
 
 
 
 // Sine waves using sin() and cos()
 
 period += increment
 rad= 2*PI*period
 Y=mag*sin(rad)
 or
 Y=mag*cos(rad)
 
 
 // Sine waves using complex numbers 
 // and accumulator.
  A=A*M
  rad = 2.0 * Math.PI * 0.2
  mag = 1.0
  M.re=mag*Math.sin( rad )
  M.im=mag*Math.cos( rad )
  at= mr*ar-mi*ai
  ai= mr*ai+mi*ar
  ar=at 

 // Sine waves using differential equations
  Itterate these each time slice:-
  x=x+y*n
  y=y-x*n 
  
  This is the solution to d^2 V/dt^2 = -nV 
 
  dV/dt = j n V
  
  Numerically solve 
  
  re_next = re_now + gradient * step length
  
  re_next=re_now+im_now*n
  im_next=im_now-re_next*n 
 
  This is a combination of the forward and backward integration and are stable
 
 however the forward Euler integration explodes
 
  re_next=re_now+im_now*n
  im_next=im_now-re_now*n 
 
 however the backward Euler integration explodes
 
  re_next=re_now+im_next*n
  im_next=im_now-re_next*n 
  
  

 Idea:- Generate Three Phase to give an RGB value
 
  This is based on a Wireless World article 
   by N Darwood in November 1982.
 
  Itterate these each time slice:-
 
  A=A+n*(B-C)
  B=B+n*(C-A)
  C=C+n*(A-B)
 
 If A, B, C are three axis 120 degree relative to each other. 
 
  A=cos( 2*pi*t/T );
  B=cos( 2*pi*t/T + 2*pi/3 );
  C=cos( 2*pi*t/T + 2*pi/6);
  
  Using complex numbers:-
  
  B= M*A
  C= M*M*A
  A= M*M*M*A
  
  M.re = cos(2*pi/3 )
  M.im = sin(2*pi/3 )
 
 
 
 Why is this stable?
 
 Assume it is a solution of a differential equation?
 
 forward Euler uses the gradient at now
 backward Euler uses the gradient at now+1
 
 They each have an error which must cancel.
 
 Assume A1 is the next itteration of A0, B1 is B0 + update
 
 These must be executed in the order below without 
 
  A1=A0+n*(B0-C0)   // forward Euler A1 is based on now values of B and C
  B1=B0+n*(C0-A1)   // Forward and backward Euler integration, based on old and new 	
  C1=C0+n*(A1-B1)   // backward Euler C1 is based on new A and B
  
 
 
  

image