anchor.diff:          if (aboveHorizon) {
             newSplitLines[0].hidden = false;
             newSplitLines[1].hidden = true;
  +          horizonReplacementLines[Horizon.Line.indexOf(horizonSplitLines[0])] = newSplitLines[0];
             //Horizon.Line[Horizon.Line.indexOf(horizonSplitLines[0])] = newSplitLines[0];
             // Replace 
           } else { // If line start is below horizon start, line should be invisible.
             newSplitLines[0].hidden = true;
             newSplitLines[1].hidden = false;
  +          horizonReplacementLines[Horizon.Line.indexOf(horizonSplitLines[1])] = newSplitLines[1];
             //Horizon.Line[Horizon.Line.indexOf(horizonSplitLines[1])] = newSplitLines[1];
           }
  -        
  -        // TODO: why continue here? (probably just remove)
  -        continue;
         }
       }
   
  
positive.code:     geometry.vertices.add(new Vector3(lineSegment.start.x, lineSegment.start.y + 5, 0.0));
      geometry.vertices.add(new Vector3(lineSegment.end.x, lineSegment.end.y + 5, 0.0));
    }
    var line = new Line(geometry, material);
    scene.add(line);
  }
negative.code:   return possibleIntersectors;
  }
  
  Map<int, LineSegment> horizonReplacementLines = new Map<int, LineSegment>();
  List<LineGroup> Lines = new List<LineGroup>();
  LineGroup Horizon = new LineGroup();
  void calculateLines() {
    Lines.clear();
    intersectionPoints.clear();
    const int lineCount = 3;
    Math.Random rand = new Math.Random();
    // Start w/ two lines - set up manually
    LineGroup a = new LineGroup();
  