Published on *Computer Science Department at Princeton University* (http://www.cs.princeton.edu)

The main contribution of this work is an O(n+k) time algorithm for computing all k intersections among n line segments in the plane. This time complexity is easily shown to be optimal. Within the same asymptotic cost our algorithm can also construct the subdivision of the plane defined by the segments and compute which segment (if any) lies right above (or below) each intersection and each endpoint. The algorithm has been implemented and performs very well. The storage requirement is on the order of n + k in the worst case, but it is considerably lower in practice. To analyze the complexity of the algorithm we use an amortization argument based on a new combinatorial theorem on line arrangements.