Skip welcome & menu and move to editor
Welcome to JS Bin
Load cached copy from
 
<meta name="description" content="Maize & Blue Harmonic Oscillator" />
<html>
  <script src="https://code.jquery.com/jquery-latest.js"></script>
  <script src="https://blinken.org/client.js"></script>
<body></body>
</html>
 
(new Blinken({title: "Maize & Blue Harmonic Oscillator", 
              author: "yottalogical"})).run(function () {
    
    // Initial condition
    var position = 0; // Bulbs
    var velocity = 0.0; // Bulbs per second
    
    // Update lights one frame
    return function (lights) {
      
      // A quick catch to ensure no index out of bounds errors
      if (0 <= position && position <= lights.length - 1) {
        
        // Light up the bulb at the leadining position
        lights[position].a = 1;
        
        // Set color (yellow going up, blue going down)
        if (velocity >= 0) {
          lights[position].rgb(1, 1, 0);
        } else {
          lights[position].rgb(0, 0, 1);
        }
      }
      
      // Progressively dim trailing bulb
      for (var i = 0; i < lights.length; i++) {
        if (lights[i].a > 0) {
          lights[i].a -= 0.05;
        }
      }
      
      // Each update, position changes by the same amount
      // Direction of velocity is reflected in the direction position changes
      // Magnitude of velocity is relfected by how quickly updates occur (see return statement)
      position += (velocity >= 0 ? 1 : -1);
      
      // Velocity changes proportionally to the distance from equlibrium (as is the case with harmonic motion)
      velocity += (lights.length/2.0 - 1 - position) / 15.0;
      
      // The faster velocity is, the faster updates occur
      // Frequency is inversely proportional to period
      return 1000/Math.abs(velocity);
    };
});
Output

You can jump to the latest bin by adding /latest to your URL

Dismiss x
public
Bin info
yottalogicalpro
0viewers