Polygon: ->new( Point p1, Point p2, ... ); ->has_inside( Point p ); # return true/false ->get_outside_point(); # return Point outside the polygon ->first_line(); # return 'line 1' - reset counter ->next_line(); # return next_line, incr counter # undef if no more Line: ->new( Point x, Point y ); ->intersects( Line l ); # return true/false # Is this what you mean by 'same_line'? ->equals( Line l ); # return true/false