anchor.diff:  List<LineGroup> Lines = new List<LineGroup>();
   LineGroup Horizon = new LineGroup();
   void calculateLines() {
  +  const int lineCount = 10;
  +  Math.Random rand = new Math.Random();
     // Start w/ two lines - set up manually
     LineGroup a = new LineGroup();
  -  a.add(new LineSegment(new Vector2(-2.0, 1.0), new Vector2(0.0, -1.0)));
  -  a.add(new LineSegment(new Vector2(0.0, -1.0), new Vector2(2.0, 1.0)));
  +  Vector2 from = new Vector2(-6.0, 3.0 * rand.nextDouble());
  +  for (int i = 0; i < lineCount; i++) {
  +    Vector2 to = new Vector2(i - 5.0, 3.0 * rand.nextDouble());
  +    a.add(new LineSegment(from, to));
  +    from = to;
  +  }
  +//  a.add(new LineSegment(new Vector2(-2.0, 1.0), new Vector2(0.0, -1.0)));
  +//  a.add(new LineSegment(new Vector2(0.0, -1.0), new Vector2(2.0, 1.0)));
     Lines.add(a);
     Horizon = a;
     
     LineGroup b = new LineGroup();
  -  b.add(new LineSegment(new Vector2(-2.0, -1.0), new Vector2(0.0, 1.0)));
  -  b.add(new LineSegment(new Vector2(0.0, 1.0), new Vector2(2.0, -1.0)));
  +  from = new Vector2(-6.0, 3.0 * rand.nextDouble());
  +  for (int i = 0; i < lineCount; i++) {
  +    Vector2 to = new Vector2(i - 5.0, 3.0 * rand.nextDouble());
  +    b.add(new LineSegment(from, to));
  +    from = to;
  +  }
  +  //b.add(new LineSegment(new Vector2(-2.0, -1.0), new Vector2(0.0, 1.0)));
  +  //b.add(new LineSegment(new Vector2(0.0, 1.0), new Vector2(2.0, -1.0)));
     Lines.add(b);
   
     // On intersect, remove line and add two new lines with start/end at intersect position.
  
positive.code:   renderer.render(scene, camera);
  }
  
  // TODO: LineSegment?
  class LineSegment {
    Vector2 start;
    Vector2 end;
  
negative.code:   // Might as well use Vector3s to get depth, this is just easier to work with for now
    int depth;
    bool visible = true;
    bool intersects = false;
    
    // Assumes point is on line
    List<LineSegment> split(Vector2 position) {
  