anchor.diff:  
     Float32List positions;
     Float32List colors;
  -  Float32List sizes;
  +
  +  int maxTriangles = 16;
  +  int vertices = 3;
   
     CircleRenderingSystem(RenderingContext gl)
         : super(gl, Aspect.getAspectForAllOf([Position, Circle, Color, Heartbeat]));
  
positive.code:     var uModelMatrix = gl.getUniformLocation(program, 'uModelMatrix');
      gl.uniformMatrix4fv(uModelMatrix, false, modelMatrix.storage);
  
      gl.drawArrays(RenderingContext.POINTS, 0, length);
    }
  
    @override
    void updateLength(int length) {
      sizes = new Float32List(length);
      positions = new Float32List(length * 2);
      colors = new Float32List(length * 4);
    }
  
    @override
    String get vShaderSource => '''
  uniform mat4 uModelMatrix;
  attribute float a_Size;
  attribute vec2 a_Position;
  attribute vec4 a_Color;
  varying vec4 v_Color;
  void main() {
    gl_Position = uModelMatrix * vec4(a_Position.x / 400.0 - 1.0, -(a_Position.y / 300.0 - 1.0), 0.0, 1.0);
    gl_PointSize = a_Size;
    v_Color = a_Color;
  }
  ''';
  
negative.code:     if (heartbeatMod > 0.8 * beat) {
        radius = radius + (1000 * heartbeatMod / beat - 800) * mod;
      }
      for (int triangle = 0; triangle < maxTriangles; triangle++) {
        for (int vertex = 0; vertex < vertices; vertex++) {
          var colorIndex = ((index * maxTriangles + triangle) * vertices + vertex) * 4;
  
          colors[colorIndex] = red;
          colors[colorIndex + 1] = green;
          colors[colorIndex + 2] = blue;
          colors[colorIndex + 3] = color.alpha;
        }
        var posIndex = (index * maxTriangles + triangle) * 2 * vertices;
        positions[posIndex] = position.x;
        positions[posIndex + 1] = position.y;
        positions[posIndex + 2] = position.x + radius * cos(2 * PI * triangle / maxTriangles);
        positions[posIndex + 3] = position.y + radius * sin(2 * PI * triangle / maxTriangles);
        positions[posIndex + 4] = position.x + radius * cos(2 * PI * (triangle+1) / maxTriangles);
        positions[posIndex + 5] = position.y + radius * sin(2 * PI * (triangle+1) / maxTriangles);
      }
    }
  
  
    @override
    void render(int length) {
      buffer('a_Position', positions, 2);
      buffer('a_Color', colors, 4);
  
  