sub intersects { my ($self, $arg1, $arg2) = @_; unless ( ($self->_is_point($arg1) or $self->_is_line($arg1)) && ($self->_is_point($arg2) or $self->_is_line($arg2)) ) { die "Bad args"; } if ($arg1->isa('point') and $arg2->isa('point')) { return $arg1->equals($arg2); } elsif ($arg1->isa('point') and $arg2->isa('line')) { return $self->_lp_intersect($arg1, $arg2); } elsif ($arg1->isa('line') and $arg2->isa('point')) { return $self->_lp_intersect($arg2, $arg1); } elsif ($arg1->isa('line') and $arg2->isa('line')) { return $self->_line_intersect($arg1, $arg2); } }