Here is an interesting exercise:
Let P be a simple, but not necessarily convex, polygon and q an arbitrary point not necessarily in P.
Design an efficient algorithm to find a line segment originating from q that intersects the maximum number of edges of P.
In other words, if standing at point q, in what direction should you aim a gun so the bullet will go through the largest number of walls?
A bullet through a vertex of P gets credit for only one wall.
An O(n log n) algorithm is possible. n is the number of vertices or edges, as it is a polygon, number of edges roughly equals to number of vertices.
Here is my thought:
Connect q with all vertices (let's say there are N vertices) in P first. There will be N lines, or N-1 pairs of lines.
The final shooting line must be in between these pairs. So we must find the pair that contains the largest number of edges.
I don't think this solution is O(n log n).
Any ideas?