Name
Math::Intersection::Circle::Line - Find the points at which a circle intersects a line.
Synopsis
use Math::Intersection::Circle::Line;
intersectionCircleLine
{printf "Intersects at:\n%d, %d\n%d, %d\n", @_ if @_ == 4}
1, 1, 1, # Circle at (1,1) with radius 1
-1, 1, 1, 1; # x, y coordinates of two points on a diagonally crossing line
# Intersects at:
# 0, 1
# 2, 1
intersectionCircleLine
{printf "Tangents touches at\n%d, %d\n", @_ if @_ == 2}
0, 0, 1, # Circle centered on origin with radius 1
-1, 1, 1, 1; # Line along y == 1
# Tangents touches at
# 0, 1
intersectionCircleLine
{print "No intersection\n" unless @_}
0, 0, 1, # Circle at origin with radius 1
-2, 2, 2, 2; # Line along y == 2
# No intersection
Description
Find the points at which a circle intersects a line in two dimensions.
In two dimensional real space a line intersects the circumference of a circle at two points if the line crosses the circle or at one point if the line is a tangent to the circle or at zero points if the line misses the circle completely.
Given a circle specified by the coordinates of its centre and its radius and a line specified by the coordinates of two separate points on the line, intersectionCircleLine()
calls the subroutine supplied as the first parameter with the coordinates of the points at which the line and circle intersect. If there are two intersection points, 2 pairs of numbers are supplied as parameters. If there is only one intersection point, one pair of numbers is supplied. If there are no intersection points, an empty parameter list is supplied.
intersectionCircleLine()
is easy to use and fast. It is written in 100% Pure Perl.
Export
The intersectionCircleLine()
function is exported.
Installation
Standard Module::Build process for building and installing modules:
perl Build.PL
./Build
./Build test
./Build install
Or, if you're on a platform (like DOS or Windows) that doesn't require the "./" notation, you can do this:
perl Build.PL
Build
Build test
Build install
Author
Philip R Brenan at gmail dot com
http://www.appaapps.com
Copyright
Copyright (c) 2015 Philip R Brenan.
This module is free software. It may be used, redistributed and/or modified under the same terms as Perl itself.