Editing Computational geometry

Jump to: navigation, search

Warning: You are not logged in. Your IP address will be publicly visible if you make any edits. If you log in or create an account, your edits will be attributed to your username, along with other benefits.

The edit can be undone. Please check the comparison below to verify that this is what you want to do, and then save the changes below to finish undoing the edit.
Latest revision Your text
Line 62: Line 62:
 
==The equation of a line==
 
==The equation of a line==
 
In computational geometry, we have to treat all aspects of geometry algebraically. Computers are excellent at dealing with numbers but have no mechanism for dealing with geometrical constructions; rather we must reduce
 
In computational geometry, we have to treat all aspects of geometry algebraically. Computers are excellent at dealing with numbers but have no mechanism for dealing with geometrical constructions; rather we must reduce
them to algebra if we wish to accomplish anything.
+
them to algebra if we wish to accomplish anything.<br/>
 
+
In Ontario high schools, the ''equation of a line'' is taught in the ninth grade. For example, the line which passes through the points (0,1) and (1,0) has the equation <math> x + y = 1 </math>. Precisely, this means that for a given point <math>(x,y)</math>, the statement <math>x + y = 1</math> is equivalent to, or sufficient and necessary for, the point to be on the line.<br/>
In Ontario high schools, the ''equation of a line'' is taught in the ninth grade. For example, the line which passes through the points (0,1) and (1,0) has the equation <math> x + y = 1 </math>. Precisely, this means that for a given point <math>(x,y)</math>, the statement <math>x + y = 1</math> is equivalent to, or sufficient and necessary for, the point to be on the line.
+
 
+
 
The form of the equation of the line which is first introduced is generally the <math> y = mx + b </math>, in which <math> m </math> is the slope of the line and <math> b </math> is the y-intercept. For example, the line discussed above has the equation <math> y = -x + 1 </math>, that is, <math> m = -1 </math> and <math> b = 1 </math>. By substituting different values for <math> m </math> and <math> b </math>, we can obtain various (different) lines. But there's a problem here: if your line is vertical, then it is not
 
The form of the equation of the line which is first introduced is generally the <math> y = mx + b </math>, in which <math> m </math> is the slope of the line and <math> b </math> is the y-intercept. For example, the line discussed above has the equation <math> y = -x + 1 </math>, that is, <math> m = -1 </math> and <math> b = 1 </math>. By substituting different values for <math> m </math> and <math> b </math>, we can obtain various (different) lines. But there's a problem here: if your line is vertical, then it is not
possible to choose values of <math> m </math> and <math> b </math> for the line. (Try it!) This is because the y-coordinate is no longer a function of the x-coordinate.
+
possible to choose values of <math> m </math> and <math> b </math> for the line. (Try it!) This is because the y-coordinate is no longer a function of the x-coordinate.<br/>
 
+
 
Thus, when dealing with lines computationally, it seems we would need to have
 
Thus, when dealing with lines computationally, it seems we would need to have
 
a special case: check if the line is vertical; if so, then do something,
 
a special case: check if the line is vertical; if so, then do something,
Line 76: Line 73:
 
==Standard Form of the equation of a line==
 
==Standard Form of the equation of a line==
 
Even though the slope-intercept form cannot describe a vertical line, there ''is'' an equation that describes a vertical line. For example, the line passing through (3,1) and (3,8) is <math> x = 3 </math>. In fact, almost any line can be described by an equation of the form <math> x = my + b </math>. (Try it if you don't believe me. I have merely switched around <math>x</math> and <math>y</math> from the slope-intercept form.) Except... ''horizontal'' lines. So we have two forms of the equation of a line: one which fails on vertical lines and one which fails on horizontal lines. Can we combine them to give an equation of the line which is valid for ''any''
 
Even though the slope-intercept form cannot describe a vertical line, there ''is'' an equation that describes a vertical line. For example, the line passing through (3,1) and (3,8) is <math> x = 3 </math>. In fact, almost any line can be described by an equation of the form <math> x = my + b </math>. (Try it if you don't believe me. I have merely switched around <math>x</math> and <math>y</math> from the slope-intercept form.) Except... ''horizontal'' lines. So we have two forms of the equation of a line: one which fails on vertical lines and one which fails on horizontal lines. Can we combine them to give an equation of the line which is valid for ''any''
line?
+
line?<br/>
 
+
As it turns out, it is indeed possible.<br/>
As it turns out, it is indeed possible.
+
 
+
 
That equation, the ''standard form of the equation of the line'' is:
 
That equation, the ''standard form of the equation of the line'' is:
 
:<math> \displaystyle Ax + By + C = 0 </math>
 
:<math> \displaystyle Ax + By + C = 0 </math>
 
By substituting appropriate values of <math> A </math>, <math> B </math>, and <math> C </math>, one can
 
By substituting appropriate values of <math> A </math>, <math> B </math>, and <math> C </math>, one can
 
describe any line with this equation. And by storing values of <math> A </math>, <math> B </math>, and <math> C </math>, one can represent a line in the computer's memory.
 
describe any line with this equation. And by storing values of <math> A </math>, <math> B </math>, and <math> C </math>, one can represent a line in the computer's memory.
Here are some pairs of points and possible equations for each:
+
Here are some pairs of points and possible equations for each:<br/>
 
:<math>
 
:<math>
 
\begin{array}{llll}
 
\begin{array}{llll}
Line 94: Line 89:
 
</math>
 
</math>
 
As you can see, it handles vertical and horizontal lines properly, as well
 
As you can see, it handles vertical and horizontal lines properly, as well
as lines which are neither.
+
as lines which are neither.<br/>
 
+
 
Note that the standard form is not unique: for example, the equation of the
 
Note that the standard form is not unique: for example, the equation of the
 
first line could have just as well been <math> -x - y + 1 = 0 </math> or perhaps
 
first line could have just as well been <math> -x - y + 1 = 0 </math> or perhaps
 
<math> 5x + 5y - 5 = 0 </math>. Any given line has infinitely many representations
 
<math> 5x + 5y - 5 = 0 </math>. Any given line has infinitely many representations
 
in the standard form. However, each standard form representation describes
 
in the standard form. However, each standard form representation describes
at most one line.
+
at most one line.<br/>
 
+
 
If <math> A </math> and <math> B </math> are both zero, the standard form describes no line
 
If <math> A </math> and <math> B </math> are both zero, the standard form describes no line
 
at all.
 
at all.
Line 132: Line 125:
  
 
==Construction of the line through two given points==
 
==Construction of the line through two given points==
A good question is: ''how'' do we determine that fourth equation above, the equation of the line through (6,6) and (4,9)? It's not immediately obvious from the two points given, whereas the other three are pretty easy.
+
A good question is: ''how'' do we determine that fourth equation above, the equation of the line through (6,6) and (4,9)? It's not immediately obvious from the two points given, whereas the other three are pretty easy.<br/>
 
+
 
For the slope-y-intercept form <math> y = mx + b </math>, you first determined the slope
 
For the slope-y-intercept form <math> y = mx + b </math>, you first determined the slope
 
<math> m </math>, and then solved for <math> b </math>. A similar procedure can be used for
 
<math> m </math>, and then solved for <math> b </math>. A similar procedure can be used for
Line 181: Line 173:
 
If two lines are coincident, every point on either line is an intersection
 
If two lines are coincident, every point on either line is an intersection
 
point. If they are parallel, then no intersection points exist. We consider the
 
point. If they are parallel, then no intersection points exist. We consider the
general case in which neither is true.
+
general case in which neither is true.<br/>
 
+
 
In general, two lines intersect at a single point. That is, the intersection
 
In general, two lines intersect at a single point. That is, the intersection
 
point is the single point that lies on both lines. Since it lies on both lines,
 
point is the single point that lies on both lines. Since it lies on both lines,
Line 240: Line 231:
 
==Direction numbers for a line==
 
==Direction numbers for a line==
 
This in itself is not very useful, but it will become important in the
 
This in itself is not very useful, but it will become important in the
following sections as a simplifying concept.
+
following sections as a simplifying concept.<br/>
 
+
 
Lines are straight; effectively they always point in the same direction. One
 
Lines are straight; effectively they always point in the same direction. One
 
way to express that direction has been slope, which unfortunately is undefined
 
way to express that direction has been slope, which unfortunately is undefined
Line 253: Line 243:
 
<math> (2,2m) </math> is also a set of direction numbers for that line, or, indeed, any
 
<math> (2,2m) </math> is also a set of direction numbers for that line, or, indeed, any
 
multiple of <math> (1,m) </math> other than <math> (0,0) </math>. (<math> (0,0) </math>
 
multiple of <math> (1,m) </math> other than <math> (0,0) </math>. (<math> (0,0) </math>
clearly tells you nothing about the line.)
+
clearly tells you nothing about the line.) <br/>
 
+
 
We can define something similar for the line in standard form. Choose some
 
We can define something similar for the line in standard form. Choose some
 
starting point <math> (x_0,y_0) </math> on line <math> l </math>. Now, move to a new point
 
starting point <math> (x_0,y_0) </math> on line <math> l </math>. Now, move to a new point
Line 282: Line 271:
 
is an "if-and-only-if" relationship. If <math> \Delta x </math> and <math> \Delta y </math> are
 
is an "if-and-only-if" relationship. If <math> \Delta x </math> and <math> \Delta y </math> are
 
in the ratio <math> -B:A </math>, then we can "shift" by <math> (\Delta x,\Delta y) </math>,
 
in the ratio <math> -B:A </math>, then we can "shift" by <math> (\Delta x,\Delta y) </math>,
and ''vice versa''.
+
and ''vice versa''.<br/>
 
+
 
Any line perpendicular to <math> l </math> will have the direction numbers <math> (A,B) </math>,
 
Any line perpendicular to <math> l </math> will have the direction numbers <math> (A,B) </math>,
 
and thus a possible equation starts <math> -Bx + Ay + \ldots = 0 </math>.
 
and thus a possible equation starts <math> -Bx + Ay + \ldots = 0 </math>.
Line 292: Line 280:
 
perpendicularity: given two lines with direction numbers <math> (A,B) </math> and
 
perpendicularity: given two lines with direction numbers <math> (A,B) </math> and
 
<math> (C,D) </math>, they are perpendicular [http://en.wikipedia.org/wiki/If_and_only_if if and only if]
 
<math> (C,D) </math>, they are perpendicular [http://en.wikipedia.org/wiki/If_and_only_if if and only if]
<math> AC + BD = 0 </math>.
+
<math> AC + BD = 0 </math>.<br/>
 
+
 
Given some line, all lines parallel to that one have the same direction numbers. That is, the direction
 
Given some line, all lines parallel to that one have the same direction numbers. That is, the direction
 
numbers, while providing information about a line's direction, provide no
 
numbers, while providing information about a line's direction, provide no
 
information about its position. However, sometimes all that is needed is the direction, and here the
 
information about its position. However, sometimes all that is needed is the direction, and here the
 
direction numbers are very useful.
 
direction numbers are very useful.
 
==Parametric equation of a line==
 
Given some line <math>Ax + By + C = 0</math> and a point <math>(x_0, y_0)</math> known to be on the line, we can use the direction numbers to write the parametric equation of the line. Since <math>(-B,A)</math> is a set of direction numbers for the line, we see that <math>(x_0 - Bt, y_0 + At)</math> will be on the line for any <math>t</math>, and furthermore each point on the line corresponds to exactly one value of <math>t</math> in this way.
 
 
==Translation along a line==
 
Given some line <math>Ax + By + C = 0</math> and a point <math>(x_0, y_0)</math> known to be on the line, we wish to locate another point on the line that is distance <math>h</math> away from <math>(x_0, y_0)</math>. We can do this by observing that the general point is given by <math>(x_0 - Bt, y_0 + At)</math>, which is distance <math>\sqrt{(Bt)^2 + (At)^2} = t \sqrt{A^2+B^2} = h</math> away from <math>(x_0, y_0)</math>. Therefore, we want <math>t = \frac{h}{\sqrt{A^2+B^2}}</math>, and finally obtain <math>\left(x_0 - \frac{Bh}{\sqrt{A^2+B^2}}, y_0 + \frac{Ah}{\sqrt{A^2+B^2}}\right)</math>. Note that unless <math>h=0</math>, there is another possible answer, which is simply "on the other side": <math>\left(x_0 + \frac{Bh}{\sqrt{A^2+B^2}}, y_0 - \frac{Ah}{\sqrt{A^2+B^2}}\right)</math>.
 
  
 
==Dropping a perpendicular==
 
==Dropping a perpendicular==
Line 317: Line 298:
 
\end{array}
 
\end{array}
 
</math>
 
</math>
where <math> A'x+B'y+C'=0 </math> is the perpendicular line desired.
+
where <math> A'x+B'y+C'=0 </math> is the perpendicular line desired.<br/>
 
+
 
There is nothing difficult to memorize here: we already noted in the previous
 
There is nothing difficult to memorize here: we already noted in the previous
 
section how to find the values of <math> A' </math> and <math> B' </math>, and finding the value
 
section how to find the values of <math> A' </math> and <math> B' </math>, and finding the value
 
of <math> C' </math> is merely setting <math> A'x_0+B'y_0+C' </math> equal to zero (so that the
 
of <math> C' </math> is merely setting <math> A'x_0+B'y_0+C' </math> equal to zero (so that the
point <math> (x_0,y_0) </math> will be on the resulting line).
+
point <math> (x_0,y_0) </math> will be on the resulting line).<br/>
 
+
 
The ''foot'' of the perpendicular is the point at which it intersects the
 
The ''foot'' of the perpendicular is the point at which it intersects the
 
line <math> l </math>. It is guaranteed to exist since two lines cannot, of course, be
 
line <math> l </math>. It is guaranteed to exist since two lines cannot, of course, be
Line 346: Line 325:
 
from <math> P </math> to <math> l </math>. That is, we choose a point <math> Q </math> such that
 
from <math> P </math> to <math> l </math>. That is, we choose a point <math> Q </math> such that
 
<math> PQ \perp l </math>, and the distance from <math> P </math> to <math> l </math> is then the length
 
<math> PQ \perp l </math>, and the distance from <math> P </math> to <math> l </math> is then the length
of line segment <math> \overline{PQ} </math>, denoted <math> |PQ| </math>.
+
of line segment <math> \overline{PQ} </math>, denoted <math> |PQ| </math>.<br/>
 
+
<br/>
 
The reason why this is the shortest distance possible is this: Choose any other
 
The reason why this is the shortest distance possible is this: Choose any other
 
point <math> R </math> on <math> l </math>. Now, <math> \triangle PQR </math> is right-angled at <math> Q </math>.
 
point <math> R </math> on <math> l </math>. Now, <math> \triangle PQR </math> is right-angled at <math> Q </math>.
 
The longest side of a right triangle is the hypotenuse, so that
 
The longest side of a right triangle is the hypotenuse, so that
<math> |PR| > |PQ| </math>. Thus <math> |PQ| </math> is truly the shortest possible distance.
+
<math> |PR| > |PQ| </math>. Thus <math> |PQ| </math> is truly the shortest possible distance.<br/>
 
+
<br/>
 
Now, as noted earlier, the line <math> PQ </math>, being perpendicular to <math> l </math>, has the direction numbers <math> (A,B) </math>. Thus, for any <math> t </math>, the point <math> (x_0+At,y_0+Bt) </math> is on
 
Now, as noted earlier, the line <math> PQ </math>, being perpendicular to <math> l </math>, has the direction numbers <math> (A,B) </math>. Thus, for any <math> t </math>, the point <math> (x_0+At,y_0+Bt) </math> is on
 
<math> PQ </math>. For some choice of <math> t </math>, this point must coincide with <math> Q </math>.
 
<math> PQ </math>. For some choice of <math> t </math>, this point must coincide with <math> Q </math>.
Line 365: Line 344:
 
</math>
 
</math>
 
This instantly gives the formula for the foot of the perpendicular given in
 
This instantly gives the formula for the foot of the perpendicular given in
the previous section.
+
the previous section.<br/>
 
+
 
Now, the distance <math> |PQ| </math> is found with the Euclidean formula:
 
Now, the distance <math> |PQ| </math> is found with the Euclidean formula:
 
:<math>\displaystyle
 
:<math>\displaystyle
Line 391: Line 369:
 
when a point <math> P </math> <math> (x_0,y_0) </math> does not satisfy the equation of a line
 
when a point <math> P </math> <math> (x_0,y_0) </math> does not satisfy the equation of a line
 
<math> l </math> <math> (Ax+By+C=0) </math>, can we determine on which side of the line it lies?
 
<math> l </math> <math> (Ax+By+C=0) </math>, can we determine on which side of the line it lies?
 
+
<br/>
 
Yes we can, with a certain restriction. If <math> Ax_0 + By_0 + C > 0 </math>, then the
 
Yes we can, with a certain restriction. If <math> Ax_0 + By_0 + C > 0 </math>, then the
 
point lies on one side of the line; if <math> Ax_0 + By_0 + C < 0 </math>, then it lies
 
point lies on one side of the line; if <math> Ax_0 + By_0 + C < 0 </math>, then it lies
Line 441: Line 419:
 
\end{array}
 
\end{array}
 
</math>
 
</math>
 
==Translating a line==
 
Suppose we are given a line <math>Ax + By + C = 0</math> and we wish to find a line parallel to it such that the distance between these two lines is <math>h</math>. To do this, we suppose that the new line has equation <math>Ax + By + D = 0</math>. Since the two lines have the same <math>A</math> and <math>B</math> value, they must be parallel (or coincident of <math>C = D</math> also). Then, the distance between them will be given by <math>\frac{|C-D|}{\sqrt{A^2+B^2}}</math>, as the previous section suggests. To obtain a value of <math>h</math> for this expression, it is not hard to see that we should choose <math>D = C \pm h\sqrt{A^2+B^2}</math>.
 
  
 
=Line segments=
 
=Line segments=
Line 663: Line 638:
  
 
==Standard vector notation==
 
==Standard vector notation==
In writing, vectors are represented as letters with small rightward-pointing arrows over them, ''e.g.'', <math>\vec{v}</math>. Vectors are usually ''typeset'' in bold, ''e.g.'', <math>\mathbf{v}</math>. We shall denote the components of <math>\mathbf{v}</math> as <math>v_x</math> and <math>v_y</math>. The magnitude of <math>\mathbf{v}</math> may be denoted simply <math>v</math>, or, to avoid confusion with an unrelated scalar variable, <math>\|\mathbf{v}\|</math>. There is a special vector known as the ''zero vector'', the identity translation; it leaves one's position unchanged and has the Cartesian representation [0,0]. We shall represent it as <math>\mathbf{0}</math>.
+
In text, vectors are represented as letters with small rightward-pointing arrows over them, ''e.g.'', <math>\vec{v}</math>. We shall denote the components of <math>\vec{v}</math> as <math>v_x</math> and <math>v_y</math>. The magnitude of <math>\vec{v}</math> may be denoted simply <math>v</math>, or, to avoid confusion with an unrelated scalar variable, <math>\|\vec{v}\|</math>. There is a special vector known as the ''zero vector'', the identity translation; it leaves one's position unchanged and has the Cartesian representation [0,0]. We shall represent it as <math>\vec{0}</math>.
  
 
==Basic operations==
 
==Basic operations==
Line 672: Line 647:
 
''Adding'' a vector to a point is another name for the operation in which a point is simply translated by a given vector. It is not hard to see that <math>(x,y) + [u,v] = (x+u,y+v)</math>. We could also write the same sum as <math>[u,v] + (x,y)</math>, since addition is supposed to be commutative. As one can easily see, adding a point and a vector results in another point. The zero vector is the additive identity; adding it to any point leaves the point unchanged. Geometrically, adding a point and a vector entails placing the vector's tail at the point; the vector's head then rests upon the sum.
 
''Adding'' a vector to a point is another name for the operation in which a point is simply translated by a given vector. It is not hard to see that <math>(x,y) + [u,v] = (x+u,y+v)</math>. We could also write the same sum as <math>[u,v] + (x,y)</math>, since addition is supposed to be commutative. As one can easily see, adding a point and a vector results in another point. The zero vector is the additive identity; adding it to any point leaves the point unchanged. Geometrically, adding a point and a vector entails placing the vector's tail at the point; the vector's head then rests upon the sum.
 
====Of two vectors====
 
====Of two vectors====
If we want addition to be associative too, then the sum <math>(P+\mathbf{u})+\mathbf{v}</math> must be the same point as <math>P+(\mathbf{u}+\mathbf{v})</math>. The first sum represents the point arrived at when the translations representing <math>\mathbf{u}</math> and <math>\mathbf{v}</math> are taken in succession. Therefore, in the second sum, we should define <math>\mathbf{u}+\mathbf{v}</math> in such a way so that it gives a vector representing the translation obtained by taking those of <math>\mathbf{u}</math> and <math>\mathbf{v}</math> in succession. It is not too hard to see that <math>[u_x,u_y] + [v_x,v_y] = [u_x+v_x,u_y+v_y]</math>. Geometrically, if the tail of <math>\mathbf{v}</math> is placed at the head of <math>\mathbf{u}</math>, the arrow drawn from the tail of <math>\mathbf{u}</math> to the head of <math>\mathbf{v}</math> is the sum. Again, the zero vector is the additive identity.
+
If we want addition to be associative too, then the sum <math>(P+\vec{u})+\vec{v}</math> must be the same point as <math>P+(\vec{u}+\vec{v})</math>. The first sum represents the point arrived at when the translations representing <math>\vec{u}</math> and <math>\vec{v}</math> are taken in succession. Therefore, in the second sum, we should define <math>\vec{u}+\vec{v}</math> in such a way so that it gives a vector representing the translation obtained by taking those of <math>\vec{u}</math> and <math>\vec{v}</math> in succession. It is not too hard to see that <math>[u_x,u_y] + [v_x,v_y] = [u_x+v_x,u_y+v_y]</math>. Geometrically, if the tail of <math>\vec{v}</math> is placed at the head of <math>\vec{u}</math>, the arrow drawn from the tail of <math>\vec{u}</math> to the head of <math>\vec{v}</math> is the sum. Again, the zero vector is the additive identity.
 
===Negation===
 
===Negation===
For every vector <math>\mathbf{v}</math> we can identify a corresponding vector, denoted <math>-\mathbf{v}</math>, such that the translations represented by <math>\mathbf{v}</math> and <math>-\mathbf{v}</math> are inverse transformations. Another way of stating this is that <math>\mathbf{v}+(-\mathbf{v}) = \mathbf{0}</math>, or that <math>\mathbf{v}</math> and <math>-\mathbf{v}</math> have the same length but opposite directions. If <math>\mathbf{v} = [v_x,v_y]</math>, then <math>-\mathbf{v} = [-v_x,-v_y]</math>.
+
For every vector <math>\vec{v}</math> we can identify a corresponding vector, denoted <math>-\vec{v}</math>, such that the translations represented by <math>\vec{v}</math> and <math>-\vec{v}</math> are inverse transformations. Another way of stating this is that <math>\vec{v}+(-\vec{v}) = \vec{0}</math>, or that <math>\vec{v}</math> and <math>-\vec{v}</math> have the same length but opposite directions. If <math>\vec{v} = [v_x,v_y]</math>, then <math>-\vec{v} = [-v_x,-v_y]</math>.
 
===Subtraction===
 
===Subtraction===
 
====Of a vector from a point====
 
====Of a vector from a point====
We define subtraction to be the inverse operation of addition. That is, for any point <math>P</math> and vector <math>\mathbf{v}</math>, we should have that <math>P+\mathbf{v}-\mathbf{v} = P-\mathbf{v}+\mathbf{v} = P</math>. Since the vector <math>-\mathbf{v}</math> represents the inverse translation to <math>\mathbf{v}</math>, we can simply '''add''' <math>-\mathbf{v}</math> to <math>P</math> to obtain <math>P-\mathbf{v}</math>. (Note that the expression <math>\mathbf{v}-P</math> is not meaningful.) Geometrically, this is equivalent to placing the head of the arrow at <math>P</math> and then following the arrow backward to the tail. Subtracting the zero vector leaves a point unchanged.
+
We define subtraction to be the inverse operation of addition. That is, for any point <math>P</math> and vector <math>\vec{v}</math>, we should have that <math>P+\vec{v}-\vec{v} = P-\vec{v}+\vec{v} = P</math>. Since the vector <math>-\vec{v}</math> represents the inverse translation to <math>\vec{v}</math>, we can simply '''add''' <math>-\vec{v}</math> to <math>P</math> to obtain <math>P-\vec{v}</math>. (Note that the expression <math>\vec{v}-P</math> is not meaningful.) Geometrically, this is equivalent to placing the head of the arrow at <math>P</math> and then following the arrow backward to the tail. Subtracting the zero vector leaves a point unchanged.
 
====Of a vector from a vector====
 
====Of a vector from a vector====
To subtract one vector from another, we add its negative. Again, we find that this definition leads to subtraction being the inverse operation of addition. It is not too hard to see that <math>[u_x,u_y] - [v_x,v_y] = [u_x-v_x,u_y-v_y]</math>. Geometrically, if the vectors <math>\mathbf{u}</math> and <math>\mathbf{v}</math> are placed tail-to-tail, then the vector from the head of <math>\mathbf{u}</math> to the head of <math>\mathbf{v}</math> is <math>\mathbf{v}-\mathbf{u}</math>, and ''vice versa''. Note that <math>\mathbf{u}-\mathbf{v} = -(\mathbf{v}-\mathbf{u})</math>.
+
To subtract one vector from another, we add its negative. Again, we find that this definition leads to subtraction being the inverse operation of addition. It is not too hard to see that <math>[u_x,u_y] - [v_x,v_y] = [u_x-v_x,u_y-v_y]</math>. Geometrically, if the vectors <math>\vec{u}</math> and <math>\vec{v}</math> are placed tail-to-tail, then the vector from the head of <math>\vec{u}</math> to the head of <math>\vec{v}</math> is <math>\vec{v}-\vec{u}</math>, and ''vice versa''. Note that <math>\vec{u}-\vec{v} = -(\vec{v}-\vec{u})</math>.
 
====Of a point from a point====
 
====Of a point from a point====
 
A vector can be considered the difference between two points, or the translation required to take one point onto the other. Given the two points <math>P\ (P_x,P_y)</math> and <math>Q\ (Q_x,Q_y)</math>, the vector from <math>P</math> to <math>Q</math> is <math>[Q_x-P_x,Q_y-P_y]</math>, and ''vice versa''. Note that <math>P-Q = -(Q-P)</math>.
 
A vector can be considered the difference between two points, or the translation required to take one point onto the other. Given the two points <math>P\ (P_x,P_y)</math> and <math>Q\ (Q_x,Q_y)</math>, the vector from <math>P</math> to <math>Q</math> is <math>[Q_x-P_x,Q_y-P_y]</math>, and ''vice versa''. Note that <math>P-Q = -(Q-P)</math>.
 
===Multiplication===
 
===Multiplication===
 
A vector can be ''scaled'' by a scalar (real number). This operation is known as ''scalar multiplication''. The product <math>\alpha[v_x,v_y]</math> denotes the vector <math>[\alpha v_x,\alpha v_y]</math>. This could also be notated <math>[v_x,v_y]\alpha</math>, though placing the scalar after the vector is more rare. Scalar multiplication takes precedence over addition and subtraction. The geometric interpretation is a bit tricky. If <math>\alpha > 0</math>, then the direction of the vector is left unchanged and the length is scaled by the factor <math>\alpha</math>. If <math>\alpha = 0</math>, then the result is the zero vector; and if <math>\alpha < 0</math>, then the vector is scaled by the factor <math>|\alpha|</math> and its direction is reversed. The scalar 1 is the multiplicative identity. Multiplying by the scalar -1 yields the negative of the original vector. Scalar multiplication is distributive.
 
A vector can be ''scaled'' by a scalar (real number). This operation is known as ''scalar multiplication''. The product <math>\alpha[v_x,v_y]</math> denotes the vector <math>[\alpha v_x,\alpha v_y]</math>. This could also be notated <math>[v_x,v_y]\alpha</math>, though placing the scalar after the vector is more rare. Scalar multiplication takes precedence over addition and subtraction. The geometric interpretation is a bit tricky. If <math>\alpha > 0</math>, then the direction of the vector is left unchanged and the length is scaled by the factor <math>\alpha</math>. If <math>\alpha = 0</math>, then the result is the zero vector; and if <math>\alpha < 0</math>, then the vector is scaled by the factor <math>|\alpha|</math> and its direction is reversed. The scalar 1 is the multiplicative identity. Multiplying by the scalar -1 yields the negative of the original vector. Scalar multiplication is distributive.
 
The zero vector is a scalar multiple of any other vector. However, if two non-zero vectors are multiples of each other, then either they are ''parallel'', that is, in the same direction (<math>\alpha > 0</math>), or they are ''antiparallel'', that is, in opposite directions (<math>\alpha < 0</math>).
 
 
===Division===
 
===Division===
A vector can be divided by a scalar <math>\alpha</math> by multiplying it by <math>\alpha^{-1}</math>. This is notated in the same way as division with real numbers. Hence, <math>\frac{[x,y]}{\alpha} = \left[\frac{x}{\alpha},\frac{y}{\alpha}\right]</math>. Division by 0 is illegal.
+
A vector can be divided by a scalar <math>\alpha</math> by multiplying it by <math>\alpha^{-1}</math>. This is denoted in the same way as division with real numbers. Hence, <math>\frac{[x,y]}{\alpha} = \left[\frac{x}{\alpha},\frac{y}{\alpha}\right]</math>. Division by 0 is illegal.
 
==The unit vector==
 
==The unit vector==
To every vector except <math>\mathbf{v}</math> (except <math>\mathbf{v} = \mathbf{0}</math>), we can assign a vector <math>\hat{\mathbf{v}}</math> that has the same direction but a length of exactly 1. This is called a ''unit vector''. The unit vector can be calculated as follows:
+
To every vector except <math>\vec{v}</math> (except <math>\vec{v} = \vec{0}</math>), we can assign a vector <math>\hat{v}</math> that has the same direction but a length of one. This is called a ''unit vector''. The unit vector can be calculated as follows:<br/>
:<math>\hat{\mathbf{v}} = \frac{\mathbf{v}}{\|\mathbf{v}\|}</math>
+
<math>\hat{v} = \frac{\vec{v}}{\|\vec{v}\|}</math><br/>
There are two ''elementary unit vectors'': [1,0], denoted <math>\hat{\boldsymbol{\imath}}</math>, and [0,1], denoted <math>\hat{\boldsymbol{\jmath}}</math>. That is, the unit vectors pointing along the positive x- and y-axes. Note that we can write a vector <math>\mathbf{v}</math> as <math>v_x\hat{\boldsymbol{\imath}} + v_y\hat{\boldsymbol{\jmath}}</math>.
+
 
+
 
==Obtaining a vector of a given length in the same direction as a given vector==
 
==Obtaining a vector of a given length in the same direction as a given vector==
Suppose we want a vector of length <math>l</math> pointing in the same direction as <math>\mathbf{v}</math>. Then, all we need to do is scale <math>\mathbf{v}</math> by the factor <math>\frac{l}{\|\mathbf{v}\|}</math>. Thus our new vector is
+
Suppose we want a vector of length <math>l</math> pointing in the same direction as <math>\vec{v}</math>. Then, all we need to do is scale <math>\vec{v}</math> by the factor <math>\frac{l}{\|\vec{v}\|}</math>. Thus our new vector is<br/>
<math>\frac{l}{\|\mathbf{v}\|}\mathbf{v}</math>, which can also be written <math>l\frac{\mathbf{v}}{\|\mathbf{v}\|}</math> = <math>l\hat{\mathbf{v}}</math>. Hence the unit vector is a "prototype" for vectors of a given direction.
+
<math>\frac{l}{\|\vec{v}\|}\vec{v}</math>, which can also be written <math>l\frac{\vec{v}}{\|\vec{v}\|}</math> = <math>l\hat{v}</math>. Hence the unit vector is a "prototype" for vectors of a given direction.
 
==Rotation==
 
==Rotation==
Given a vector <math>\mathbf{v}\ [x,y]</math> and an angle <math>\theta</math>, we can rotate <math>\mathbf{v}</math> counterclockwise through the angle <math>\theta</math> to obtain a new vector <math>[x',y']</math> using the following formulae:
+
Given a vector <math>\vec{v}\ [x,y]</math> and an angle <math>\theta</math>, we can rotate <math>\vec{v}</math> counterclockwise through the angle <math>\theta</math> to obtain a new vector <math>[x',y']</math> using the following formulae:
:<math>x' = x\cos\theta - y\sin\theta</math>
+
<math>x' = x\cos\theta - y\sin\theta</math><br/>
:<math>y' = x\sin\theta + y\cos\theta</math>
+
<math>y' = x\sin\theta + y\cos\theta</math><br/>
 
The same formula can be used to rotate points, when they are considered as the endpoints of vectors with their tails at the origin.
 
The same formula can be used to rotate points, when they are considered as the endpoints of vectors with their tails at the origin.
 
==Dot product==
 
==Dot product==
The ''dot product'' or ''scalar product'' is notated and defined as follows:
+
The ''dot product'' or ''scalar product'' is defined as follows:<br/>
:<math>[a_x,a_y]\cdot[b_x,b_y] = a_x b_x + a_y b_y</math>
+
<math>[a_x,a_y]\cdot[b_x,b_y] = a_x b_x + a_y b_y</math><br/>
It is commutative, but not associative (since expressions like <math>\mathbf{a}\cdot\mathbf{b}\cdot\mathbf{c}</math> are meaningless). However, the dot product does associate with scalar multiplication; that is, <math>\alpha(\mathbf{a}\cdot\mathbf{b}) = (\alpha\mathbf{a})\cdot\mathbf{b}</math>. It is distributive over addition, so that <math>\mathbf{a}\cdot(\mathbf{b}+\mathbf{c}) = \mathbf{a}\cdot\mathbf{b} + \mathbf{a}\cdot\mathbf{c}</math>. (This is actually left-distributivity, but right-distributivity follows from the commutative property.) These properties can easily be proven using the Cartesian components. The dot product has two useful properties.
+
The dot product has two useful properties.
  
 
First, the dot product satisfies the relation
 
First, the dot product satisfies the relation
:<math>\mathbf{a}\cdot\mathbf{b} = \|\mathbf{a}\| \|\mathbf{b}\| \cos\theta</math>
+
<math>\vec{a}\cdot\vec{b} = \|\vec{a}\| \|\vec{b}\| \cos\theta</math>
where <math>\theta</math> is the angle between <math>\mathbf{a}</math> and <math>\mathbf{b}</math>. This allows us to find '''the angle between two vectors''' as follows:
+
where <math>\theta</math> is the angle between <math>\vec{a}</math> and <math>\vec{b}</math>. This allows us to find '''the angle between two vectors''' as follows:<br/>
:<math>\theta = \cos^{-1}\frac{\mathbf{a}\cdot\mathbf{b}}{\|\mathbf{a}\|\|\mathbf{b}\|}</math>
+
<math>\theta = \cos^{-1}\frac{\vec{a}\cdot\vec{b}}{\|\vec{a}\|\|\vec{b}\|}</math><br/>
This formula breaks down if one of the vectors is the zero vector (in which case no meaningful angle can be defined anyway). The dot product gives a quick test for perpendicularity: two nonzero vectors are perpendicular if and only if their dot product is zero. The dot product is maximal when the two vectors are parallel, and minimal (maximally negative) when the two vectors are antiparallel.
+
This formula breaks down if one of the vectors is the zero vector (in which case no meaningful angle can be defined anyway). The dot product gives a quick test for perpendicularity: two nonzero vectors are perpendicular if and only if their dot product is zero.
  
 
Second, the dot product can be used to compute ''projections''.
 
Second, the dot product can be used to compute ''projections''.
 
===The vector projection===
 
===The vector projection===
The vector projection of <math>\mathbf{a}</math> onto <math>\mathbf{b}</math> is, intuitively, the "shadow" cast by <math>\mathbf{a}</math> onto <math>\mathbf{b}</math> by a light source delivering rays perpendicular to <math>\mathbf{b}</math>. We imagine <math>\mathbf{b}</math> to be a screen and <math>\mathbf{a}</math> to be an arrow; we are ''projecting'' the arrow onto the screen. (It is okay for parts of the projection to lie outside the "screen".) Geometrically, the tail of the projection of <math>\mathbf{a}</math> onto <math>\mathbf{b}</math> is the foot of the perpendicular from the tail of <math>\mathbf{a}</math> to <math>\mathbf{b}</math>, and the head of the projection is likewise the foot of the perpendicular from the head of <math>\mathbf{a}</math>. The vector projection is a vector pointing in the same direction as <math>\mathbf{b}</math>. There is no standard notation for vector projection; one notation is <math>\operatorname{proj}_\mathbf{b}\,\mathbf{a}</math> for the projection of <math>\mathbf{a}</math> onto <math>\mathbf{b}</math>, and ''vice versa''.
+
The vector projection of <math>\vec{a}</math> onto <math>\vec{b}</math> is, intuitively, the "shadow" cast by <math>\vec{a}</math> onto <math>\vec{b}</math> by a light source delivering rays perpendicular to <math>\vec{b}</math>. We imagine <math>\vec{b}</math> to be a screen and <math>\vec{a}</math> to be an arrow; we are ''projecting'' the arrow onto the screen. (It is okay for parts of the projection to lie outside the "screen".) Geometrically, the tail of the projection of <math>\vec{a}</math> onto <math>\vec{b}</math> is the foot of the perpendicular from the tail of <math>\vec{a}</math> to <math>\vec{b}</math>, and the head of the projection is likewise the foot of the perpendicular from the head of <math>\vec{a}</math>. The vector projection is a vector pointing in the same direction as <math>\vec{b}</math>. There is no standard notation for vector projection; one notation is <math>\operatorname{proj}_\vec{b}\,\vec{a}</math> for the projection of <math>\vec{a}</math> onto <math>\vec{b}</math>, and ''vice versa''.
 
===The scalar projection===
 
===The scalar projection===
The scalar projection is the directed length of the vector projection. That is, if the angle between <math>\mathbf{a}</math> and <math>\mathbf{b}</math> is acute, then <math>\operatorname{proj}_\mathbf{b}\,\mathbf{a}</math> points in the same direction as <math>\mathbf{b}</math>, and it has a positive directed length; here the scalar projection simply equals the length of the vector projection. If that angle is obtuse, on the other hand, then <math>\operatorname{proj}_\mathbf{b}\,\mathbf{a}</math> and <math>\mathbf{b}</math> point in opposite directions, and the scalar projection is the negative of the length of the vector projection. (If the two vectors are perpendicular, the scalar projection is zero.) There is also no standard notation for the scalar projection; one possibility is <math>|\operatorname{proj}_\mathbf{b}\,\mathbf{a}|</math>. (Note the single vertical bars, instead of the double vertical bars that denote length.) You have already encountered scalar projections: in the unit circle, the sine of an angle is the scalar projection of a ray making that directed angle with the positive x-axis onto the y-axis, and likewise the cosine is a scalar projection onto the x-axis.
+
The scalar projection is the directed length of the vector projection. That is, if the angle between <math>\vec{a}</math> and <math>\vec{b}</math> is acute, then <math>\operatorname{proj}_\vec{b}\,\vec{a}</math> points in the same direction as <math>\vec{b}</math>, and it has a positive directed length; here the scalar projection simply equals the length of the vector projection. If that angle is obtuse, on the other hand, then <math>\operatorname{proj}_\vec{b}\,\vec{a}</math> and <math>\vec{b}</math> point in opposite directions, and the scalar projection is the negative of the length of the vector projection. (If the two vectors are perpendicular, the scalar projection is zero.) There is also no standard notation for the scalar projection; one possibility is <math>|\operatorname{proj}_\vec{b}\,\vec{a}|</math>. (Note the single vertical bars, instead of the double vertical bars that denote length.) You have already encountered scalar projections: in the unit circle, the sine of an angle is the scalar projection of a ray making that directed angle with the positive x-axis onto the y-axis, and likewise the cosine is a scalar projection onto the x-axis.
 
===Computing projections===
 
===Computing projections===
Why have we left discussion of the computation of the scalar and vector projections out of their respective sections? The answer is that the scalar projection is easier to compute, but harder to explain. Place the vectors <math>\mathbf{a}</math> and <math>\mathbf{b}</math> tail-to-tail at the origin. Now rotate both vectors so that <math>\mathbf{b}</math> points to the right. (Rotation actually changes the vectors, of course, but does not change the scalar projection.) Now, the cosine of the angle <math>\theta</math> between <math>\mathbf{a}</math> and <math>\mathbf{b}</math> is the scalar projection of <math>\hat{\mathbf{a}}</math> onto <math>\mathbf{b}</math>, from the definition of the cosine function. By similar triangles, <math>|\operatorname{proj}_\mathbf{b}\,\mathbf{a}|</math> is <math>\|\mathbf{a}\|</math> times this. Therefore we find:
+
Why have we left discussion of the computation of the scalar and vector projections out of their respective sections? The answer is that the scalar projection is easier to compute, but harder to explain. Place the vectors <math>\vec{a}</math> and <math>\vec{b}</math> tail-to-tail at the origin. Now rotate both vectors so that <math>\vec{b}</math> points to the right. (Rotation actually changes the vectors, of course, but does not change the scalar projection.) Now, the cosine of the angle <math>\theta</math> between <math>\vec{a}</math> and <math>\vec{b}</math> is the scalar projection of <math>\hat{a}</math> onto <math>\vec{b}</math>, from the definition of the cosine function. By similar triangles, <math>|\operatorname{proj}_\vec{b}\,\vec{a}|</math> is <math>\|\vec{a}\|</math> times this. Therefore we find:<br/>
:<math>|\operatorname{proj}_\mathbf{b}\,\mathbf{a}| = \|\mathbf{a}\| \cos \theta = \|\mathbf{a}\| \frac{\mathbf{a}\cdot\mathbf{b}}{\|\mathbf{a}\|\|\mathbf{b}\|} = \frac{\mathbf{a}\cdot\mathbf{b}}{\|\mathbf{b}\|}</math>
+
<math>|\operatorname{proj}_\vec{b}\,\vec{a}| = \|\vec{a}\| \cos \theta = \|\vec{a}\| \frac{\vec{a}\cdot\vec{b}}{\|\vec{a}\|\|\vec{b}\|} = \frac{\vec{a}\cdot\vec{b}}{\|\vec{b}\|}</math><br/>
and ''vice versa''. We could also write this as
+
and ''vice versa''.<br/>
:<math>|\operatorname{proj}_\mathbf{b}\,\mathbf{a}| = \mathbf{a}\cdot\hat{\mathbf{b}}</math>
+
To compute a vector projection, we notice that we need a vector with the directed length <math>|\operatorname{proj}_\vec{b}\,\vec{a}|</math> along <math>\vec{b}</math>. This is accomplished by scaling the unit vector <math>\hat{b}</math> by the value of the scalar projection:<br/>
because the dot product associates with scalar multiplication.
+
<math>\operatorname{proj}_\vec{b}\,\vec{a} = \frac{\vec{a}\cdot\vec{b}}{\|\vec{b}\|}\hat{b}</math><br/>
To compute a vector projection, we notice that we need a vector with the directed length <math>|\operatorname{proj}_\mathbf{b}\,\mathbf{a}|</math> along <math>\mathbf{b}</math>. This is accomplished by scaling the unit vector <math>\hat{\mathbf{b}}</math> by the value of the scalar projection:
+
:<math>\operatorname{proj}_\mathbf{b}\,\mathbf{a} = \frac{\mathbf{a}\cdot\mathbf{b}}{\|\mathbf{b}\|}\hat{\mathbf{b}}</math>
+
We could also write this as
+
:<math>\operatorname{proj}_\mathbf{b}\,\mathbf{a} = (\mathbf{a}\cdot\hat{\mathbf{b}})\hat{\mathbf{b}}</math>
+
 
Two notes: first, projecting onto the zero vector is meaningless since it has no direction, and second, neither scalar nor vector projection is commutative.
 
Two notes: first, projecting onto the zero vector is meaningless since it has no direction, and second, neither scalar nor vector projection is commutative.
==Determinant==
 
The ''determinant'' of two vectors <math>\mathbf{a}</math> and <math>\mathbf{b}</math>, denoted <math>\det(\mathbf{a},\mathbf{b})</math>, is the determinant of the matrix having <math>\mathbf{a}</math> and <math>\mathbf{b}</math> as rows (or, equivalently, columns), that is:
 
:<math>\left[\begin{matrix} a_x & a_y \\ b_x & b_y \end{matrix}\right]</math>
 
and is therefore equal to <math>a_x b_y - a_y b_x</math>.
 
The size-2 determinant is often mistakenly referred to as the ''cross product''. (This usage is nearly universal in casual programming parlance and less reputable websites.) This is because there exists a product of two three-dimensional vectors known as the cross product, and the cross-product of two vectors lying in the xy-plane is a vector pointing along the z-axis with z-component equal to the determinant of the two plane vectors. However, no background with three-dimensional vectors, cross-products, or matrices is required for this section. In two dimensions, all that is needed is the formula: <math>\det(\mathbf{a},\mathbf{b}) = a_x b_y - a_y b_x</math>. However, for the sake of convenience, we shall denote the size-2 determinant by the same symbol as the cross product, the cross: hence <math>\mathbf{a}\times\mathbf{b} = a_x b_y - a_y b_x</math>. (This also avoids confusion with the larger matrices in advanced linear algebra and higher dimensions.) It is anticommutative, meaning that <math>\mathbf{a} \times \mathbf{b} = -(\mathbf{b} \times \mathbf{a})</math>. It satisfies the properties <math>\alpha(\mathbf{a}\times\mathbf{b}) = (\alpha\mathbf{a}) \times \mathbf{b} = \mathbf{a} \times (\alpha \mathbf{b})</math>, and with addition it is both left-distributive, so that <math>\mathbf{a} \times (\mathbf{b}+\mathbf{c}) = \mathbf{a} \times \mathbf{b} + \mathbf{a} \times \mathbf{c}</math>, and right-distributive, so that <math>(\mathbf{a}+\mathbf{b})\times\mathbf{c} = \mathbf{a} \times \mathbf{c} + \mathbf{b} \times \mathbf{c}</math>. There are two primary uses for the size-2 determinant in two-dimensional computational geometry.
 
 
The determinant is useful in several algorithms for computing the [[convex hull]] because it allows us to determine the ''directed angle'' from one vector to another. (Note that the dot product allows us to determine the undirected angle; it makes sense because the dot product commutes whereas the size-2 determinant anticommutes.) The following relation holds:
 
:<math>\mathbf{a} \times \mathbf{b} = \|\mathbf{a}\| \|\mathbf{b}\| \sin \theta</math>
 
where <math>\theta</math> is the ''directed'' angle from <math>\mathbf{a}</math> to <math>\mathbf{b}</math>. That is, the counterclockwise angle from <math>\mathbf{a}</math> to <math>\mathbf{b}</math> when they are both anchored at the same point. Rearranging allows us to compute the angle directly:
 
:<math>\theta = \sin^{-1} \frac{\mathbf{a} \times \mathbf{b}}{\|\mathbf{a}\| \|\mathbf{b}\|}</math>
 
(Note that the sine function is odd, so that when <math>\mathbf{a}</math> and <math>\mathbf{b}</math> are interchanged in the above, the right side is negated, and so is the left.)
 
Often, however, we do not need the directed angle itself. In the [[Convex hull#Monotone chains algorithm|monotone chains algorithm]] for convex hull computation, for example, all we need to know is whether there is a clockwise or a counterclockwise turn from <math>\mathbf{a}</math> to <math>\mathbf{b}</math>. (That is, if one wishes to rotate <math>\mathbf{a}</math> through no more than 180 degrees either clockwise or counterclockwise so that its direction coincides with that of <math>\mathbf{b}</math>, which direction should one choose?) It turns out that if <math>\mathbf{a} \times \mathbf{b}</math> is positive, the answer is counterclockwise; if it is negative, clockwise, and if it is zero, the vectors are either parallel or antiparallel. (Indeed, the closer <math>\theta</math> is to a right angle, the larger the cross product in magnitude; in some sense then it measures "how far away" the vectors are from each other.)
 
 
The determinant is also useful in computing areas of parallelograms and triangles. If the two vectors <math>\mathbf{a}</math> and <math>\mathbf{b}</math> are placed tail-to-tail, a parallelogram can be formed using these vectors as adjacent sides; its area is <math>|\mathbf{a}\times\mathbf{b}|</math>. A triangle can also be formed using these vectors as adjacent sides; its area is half that of the parallelogram, or <math>\frac{1}{2}|\mathbf{a}\times\mathbf{b}|</math>. (This echoes the formula <math>A = \frac{1}{2}ab\sin\theta</math> taught in high-school math classes.) In fact, the area of a general quadrilateral <math>ABCD</math> can be computed with a determinant as well; it equals <math>\frac{1}{2}|(C-A)\times(D-B)|</math>.
 
  
 
=Circles=
 
=Circles=
Line 764: Line 717:
  
 
===Two points of intersection===
 
===Two points of intersection===
When the closest distance from the centre of the circle to the line is less than the circle's radius, the line intersects the circle twice.
+
When the closest distance from the centre of the circle to the line is less than the circle's radius, the line intersects the circle twice. The algebraic method must be used to find these points of intersection.
 
+
To find the two points of intersection, first drop a perpendicular from the centre of the circle to the line. Call the foot of the perpendicular <math>P</math> and denote the distance <math>|OP|</math> by <math>d</math>. Now, let the two points of intersection be <math>Q_1</math> and <math>Q_2</math>. Then, the triangles <math>\triangle OPQ_1</math> and <math>\triangle OPQ_2</math> are right-angled, and hence we see that <math>|OP|^2 + |Q_1P|^2 = |OQ_1|^2 = r^2</math> and <math>|OP|^2 + |Q_2P|^2 = |OQ_2|^2 = r^2</math>. So we compute the value <math>h = \sqrt{r^2 - |OP|^2}</math>; now, if we move <math>h</math> units in either direction along the line from <math>P</math>, we will reach either <math>Q_1</math> or <math>Q_2</math>. (The technique to do so is given in section [[#Translation along a line|Translation along a line]].)
+
  
 
==Intersection of a circle with a circle==
 
==Intersection of a circle with a circle==
Line 775: Line 726:
  
 
===One point of intersection===
 
===One point of intersection===
Let the two circles have centres <math>O_1</math> and <math>O_2</math> and radii <math>r_1</math> and <math>r_2</math>.
+
When the distance between the centres of the circles is exactly the difference between their radii, the two circles will be internally tangent. When the distance between the centres of the circles is exactly the sum of their radii, they will be externally tangent.
* When the distance between the centres of the circles is exactly the difference between their radii, the two circles will be internally tangent. Suppose that the first circle is larger. Then the point of intersection lies on the line between <math>O_1</math> and <math>O_2</math>. The intersection point and <math>O_1</math> are on opposite sides of <math>O_2</math>, and its distances from <math>O_1</math> and <math>O_2</math> are <math>r_1</math> and <math>r_2</math>, respectively. This gives <math>P = \frac{O_2 r_1 - O_1 r_2}{r_1 - r_2}</math>. (It turns out that if we swap the 1's and 2's in this formula, we get the same value; hence we can use this formula without regard to which circle is labelled 1 and which one is 2.)
+
* When the distance between the centres of the circles is exactly the sum of their radii, they will be externally tangent; they will have one point of intersection located between <math>O_1</math> and <math>O_2</math>; it will be <math>r_1</math> units away from the former and <math>r_2</math> units away from the latter, giving the formula <math>P = \frac{O_2 r_1 + O_1 r_2}{r_1 + r_2}</math>.
+
  
 
===Two points of intersection===
 
===Two points of intersection===
 
In all other cases, there will be two points of intersection.
 
In all other cases, there will be two points of intersection.
 
To find them, it will be helpful to draw a diagram. Denote the centres of the circles <math>O_1, O_2</math>, their radii <math>r_1, r_2</math>, and the two points of intersection <math>P_1, P_2</math>. First draw the ''radical axis'', the line that passes through <math>P_1</math> and <math>P_2</math>. This passes through the midpoint <math>M</math> between <math>P_1</math> and <math>P_2</math>, and here it intersects perpendicularly the line between <math>O_1</math> and <math>O_2</math>. Denote <math>|O_1M|</math> and <math>|O_2M|</math> by <math>d_1, d_2</math>, respectively. Clearly
 
:<math>d_1 + d_2 = |O_1O_2|</math>. (1)
 
Also, from the Pythagorean theorem, <math>|MP_1|^2 = |O_1P_1|^2 - |O_1M|^2 = |O_2P_1|^2 - |O_2M|^2</math>, or <math>r_1^2 - d_1^2 = r_2^2 - d_2^2</math>. Rearranging this gives
 
:<math>d_1^2 - d_2^2 = r_1^2 - r_2^2</math>. (2)
 
 
Now we solve for <math>d_1</math> and <math>d_2</math>. To do this, we factor the left side of (2), giving <math>(d_1 - d_2)(d_1 + d_2) = r_1^2 - r_2^2</math>, which allows us to divide through by (1), thus obtaining
 
:<math>d_1 - d_2 = \frac{r_1^2 - r_2^2}{|O_1O_2|}</math>. (3)
 
Equations (1) and (3) are linear and may be used to solve for <math>d_1, d_2</math> in a straightforward fashion.
 
 
Now we can compute the coordinates of <math>M</math> as <math>M = \frac{O_2 d_1 + O_1 d_2}{d_1 + d_2}</math>, using the argument from the previous section. Then construct the line perpendicular to <math>O_1O_2</math> that passes through <math>M</math> (the radical axis). Finally, we can find the distance <math>|MP_1| = |MP_2| = \sqrt{r_1^2 - d_1^2} = \sqrt{r_2^2 - d_2^2}</math>, and move this distance in either direction along the radical axis (see [[#Translation along a line|Translation along a line]]) to obtain <math>P_1</math> and <math>P_2</math>.
 
 
It should be noted that two circles that intersect at two points cut each other into two arcs each: one arc that lies within the other circle, and one that lies outside it. It is not immediately obvious which is which. However, you should be able to convince yourself from drawing a diagram that if <math>(P_1-O_1) \times (O_2-O_1) > 0</math>, then the arc of the first circle that is inside the second circle is counterclockwise from <math>P_1</math> to <math>P_2</math>, but if that determinant is negative, then the inside arc is counterclockwise from <math>P_2</math> to <math>P_1</math>. (For an example of where this is important, see {{Problem|detectors|Detectors}}.)
 
 
==Tangents==
 
A line is said to be ''tangent'' to a circle if it intersects the circle at exactly one point.
 
 
The tangent has an important property: if a circle with centre <math>O</math> has a tangent line <math>l</math> that touches it at <math>P</math>, then <math>l \perp OP</math>. The proof of this fact is simple: we assume that the two lines are not perpendicular, then drop a perpendicular from <math>O</math> to <math>l</math> at <math>Q</math>. We observe that <math>\triangle OPQ</math> is right-angled at <math>Q</math>, and that therefore <math>|OP| > |OQ|</math>. But this implies that <math>Q</math> is inside the circle, a contradiction.
 
 
To actually find the tangent line to one circle at a given point on its circumference is easy; it is simply the line passing through that point that is perpendicular to the radius.
 
 
===From point to circle===
 
Sometimes we may also be given a circle with centre and radius <math>(O, r)</math> plus a point <math>P</math> and asked to find a tangent to the circle that passes through the point. There may be either zero, one, or two such tangents.
 
 
====Point is inside circle====
 
When the point is inside the circle, there are no tangents to the circle through that point, because any line through the point must intersect the circle twice.
 
 
====Point is on circle====
 
When the point is on the circumference of the circle, the line passing through <math>P</math> that is perpendicular to <math>OP</math> is the unique tangent to the circle passing through that point.
 
 
====Point is outside circle====
 
When the point is outside the circle, there are two tangents to the circle passing through the point. To construct one such tangent, we use a trick called ''inversion''. We let one of the points of tangency be denoted <math>Q</math>. Now <math>\triangle OQP</math> is right-angled at <math>Q</math>. If we now drop a perpendicular from <math>Q</math> to <math>OP</math> at <math>R</math>, we obtain triangle <math>\triangle OQR</math> which is similar to <math>\triangle OPQ</math>. This means that <math>\frac{|OP|}{|OQ|} = \frac{|OQ|}{|OR|}</math>, so <math>|OR| = \frac{r^2}{|OP|}</math>. Note that <math>R</math> is ''inside'' the circle, unlike <math>P</math> which is ''outside'' (hence the name ''inversion''.) This allows us to locate point <math>R</math> on the line segment <math>OP</math>. Then, we see that the line segment <math>RQ</math> is perpendicular to <math>OP</math> and has length <math>\sqrt{r^2 - |OR|^2}</math> from the Pythagorean theorem in <math>\triangle OQR</math>. This gives us enough information to compute the coordinates of <math>Q</math>. There will be two possibilities, since we can draw two rays through <math>R</math> that are perpendicular to <math>OP</math>.
 
 
===Circle-circle tangents===
 
A pair of circles may have either zero, one, two, three, or four mutual tangents.
 
 
====Zero mutual tangents====
 
If one circle lies within the other (that is, the difference between their radii is greater than the distance between their centres), then they have no mutual tangents, since every tangent to the outer circle lies outside it, and hence cannot touch the inner circle.
 
 
====One mutual tangent====
 
Two circles will have one mutual tangent if they are internally tangent (that is, the difference between their radii equals the distance between their centres). This tangent can easily be found after constructing the point <math>P</math> of internal tangency (see section [[#One point of intersection|One point of intersection]] above).
 
 
====Two mutual tangents====
 
A pair of circles that intersect at two points has two mutual tangents, one on either "side". We will consider the problem of how to determine one of them.
 
 
Assume the circles have centres <math>O_1, O_2</math> and radii <math>r_1, r_2</math>. Assume further that they have some mutual tangent <math>l</math> and that <math>l</math> is tangent to the circles at <math>P_1, P_2</math>, respectively. We see that <math>O_1P_1 \perp l</math> and <math>O_2P_2 \perp l</math>. Now, assume without loss of generality that <math>r_2 \geq r_1</math>. Then drop the perpendicular from <math>O_1</math> to <math>O_2P_2</math> at <math>Q</math>, and obtain <math>|O_2Q| = r_2 - r_1</math>. Then <math>\theta = \angle O_1O_2Q = \cos^{-1} \frac{r_2-r_1}{|O_1O_2|}</math>. Also, we can solve for <math>h = |O_1Q|</math> using the Pythagorean theorem, obtaining <math>h = \sqrt{|O_1O_2|^2 - (r_2-r_1)^2}</math>. Notice that because <math>O_1QP_2P_1</math> is a rectangle, <math>h = |P_1P_2|</math>.
 
 
There are two possibilities for the location of <math>P_2</math>. One of them is obtained by rotating the ray <math>O_1 - O_2</math> clockwise through angle <math>\theta</math>, the other obtained by rotating it counterclockwise, and in either case determining where the ray cuts the second circle. (So it doesn't actually matter which circle is bigger; the formula <math>\cos^{-1} \frac{r_2-r_1}{|O_1O_2|}</math> will give the same result up to sign.)
 
 
We can then argue that the coordinates of one of the possible <math>P_2</math>'s is given by <math>O_2 + r_2 [\cos (\operatorname{atan2}(O_1-O_2) + \theta), \sin (\operatorname{atan2}(O_1-O_2) + \theta)]</math>, because <math>\operatorname{atan2}(O_1-O_2)</math> represents the directed angle from the positive x-axis to the ray from <math>O_2</math> to <math>O_1</math>, and we are adding onto this directed angle the value <math>\theta</math> to get our final position. The other possible <math>P_2</math> will be given by subtracting <math>\theta</math> instead of adding.
 
 
This formula as written is slow, since it involves trigonometric functions, which have a higher [[invisible constant factor]] than algebraic operations and square roots. Therefore, we will rewrite it in terms of only algebraic operations. Define <math>\Delta x = O_{1_x} - O_{2_x}</math> and <math>\Delta y</math> analogously.
 
 
Verify the identities <math>\cos \operatorname{atan2} \frac{y}{x} = \frac{x}{x^2 + y^2}</math> and <math>\sin \operatorname{atan2} \frac{y}{x} = \frac{y}{x^2 + y^2}</math>. (These are actually obvious from the definition of <code>atan2</code>). Then:
 
:<math>\cos( \operatorname{atan2}(O_1 - O_2) + \theta)</math>
 
:<math> = \cos \operatorname{atan2}(O_1 - O_2) \cos \theta - \sin \operatorname{atan2}(O_1 - O_2) \sin \theta</math>
 
:<math> = \frac{\Delta x}{\Delta x^2 + \Delta y^2} \frac{r_2-r_1}{|O_1O_2|} - \frac{\Delta y}{\Delta x^2 + \Delta y^2} \frac{h}{|O_1O_2|}</math>
 
:<math> = \frac{(r_2-r_1)\Delta x - h\Delta y}{|O_1O_2|^2}</math>
 
And likewise
 
:<math>\sin( \operatorname{atan2}(O_1 - O_2) + \theta)</math>
 
:<math> = \sin \operatorname{atan2}(O_1 - O_2) \cos \theta + \cos \operatorname{atan2}(O_1 - O_2) \sin \theta</math>
 
:<math> = \frac{\Delta y}{\Delta x^2 + \Delta y^2} \frac{r_2-r_1}{|O_1O_2|} + \frac{\Delta x}{\Delta x^2 + \Delta y^2} \frac{h}{|O_1O_2|}</math>
 
:<math> = \frac{h\Delta x + (r_2-r_1)\Delta y}{|O_1O_2|^2}</math>
 
After locating <math>P_2</math>, we just construct the line passing through <math>P_2</math> that is perpendicular to <math>O_2P_2</math> and this will also be tangent to the first circle at <math>P_1</math>.
 
 
====Three mutual tangents====
 
The case of three mutual tangents occurs when the two circles are externally tangent that is, when the sum of their radii equals the distance between their centres. In this case two of the three tangents (the "outer" ones) can be found using the formula in the previous section, and the third, which passes "between" the circles, may easily be found by first finding the point of mutual tangency (see section [[#One point of intersection|One point of intersection]] above).
 
 
====Four mutual tangents====
 
If two circles do not intersect or overlap at all, that is, the distance between their centres is greater than the sum of their radii, they will have four mutual tangents. Two of the mutual tangents can be found using the formulas two sections above. These are the two "outer" tangents, with the property that both circles lie on the same side of an outer tangent. There are also two "inner" tangents that "separate" the two circles from each other.
 
 
The procedure for computing these "inner" tangents is similar to the procedure for computing the "outer" tangents. We begin by letting <math>l</math> be one of these tangents, that touches the first circle at <math>P_1</math> and the second at <math>P_2</math>. Let the point of intersection of <math>l</math> with <math>O_1O_2</math> be denoted <math>Q</math>. Then, right-angled <math>\triangle O_1P_1Q</math> is similar to right-angled <math>\triangle O_2P_2Q</math>. Let <math>d_1 = |O_1Q|</math> and <math>d_2 = |O_2Q|</math>. Then, by similarity, we see that <math>\frac{d_1}{r_1} = \frac{d_2}{r_2}</math>. Along with the equation <math>d_1 + d_2 = |O_1O_2|</math>, we can solve: <math>d_1 = \frac{r_1}{r_1+r_2}|O_1O_2|, d_2 = \frac{r_2}{r_1+r_2}|O_1O_2|</math>. Then, letting <math>\theta = \angle P_2O_2Q</math>, we have <math>\cos \theta = \frac{r_2}{d_2} = \frac{r_1+r_2}{|O_1O_2|}</math>. Let <math>k = |P_1P_2|</math>, and see that <math>k = |QP_1| + |QP_2| = \sqrt{d_1^2 - r_1^2} + \sqrt{d_2^2 - r_2^2}</math>, which, after some messy algebra, will turn out to be <math>\sqrt{|O_1O_2|^2 - (r_1+r_2)^2}</math>. Also observe that <math>\sin \theta = \frac{|P_2Q|}{|O_2Q|} = \frac{|P_1Q|}{|O_1Q|} = \frac{|P_1Q|+|P_2Q|}{|O_1Q|+|O_2Q|} = \frac{k}{|O_1O_2|}</math>.
 
 
Moving along, we have <math>P_2 = O_2 + r_2 [\cos (\operatorname{atan2}(O_1-O_2) + \theta), \sin (\operatorname{atan2}(O_1-O_2) + \theta)]</math> as before. Defining <math>\Delta x = O_{1_x}-O_{2_x}</math> and <math>\Delta y</math> analogously, we obtain:
 
:<math>\cos( \operatorname{atan2}(O_1 - O_2) + \theta)</math>
 
:<math> = \cos \operatorname{atan2}(O_1 - O_2) \cos \theta - \sin \operatorname{atan2}(O_1 - O_2) \sin \theta</math>
 
:<math> = \frac{\Delta x}{\Delta x^2 + \Delta y^2} \frac{r_1+r_2}{|O_1O_2|} - \frac{\Delta y}{\Delta x^2 + \Delta y^2} \frac{k}{|O_1O_2|}</math>
 
:<math> = \frac{(r_1+r_2)\Delta x - k\Delta y}{|O_1O_2|^2}</math>
 
and likewise
 
:<math>\sin( \operatorname{atan2}(O_1 - O_2) + \theta)</math>
 
:<math> = \sin \operatorname{atan2}(O_1 - O_2) \cos \theta + \cos \operatorname{atan2}(O_1 - O_2) \sin \theta</math>
 
:<math> = \frac{\Delta y}{\Delta x^2 + \Delta y^2} \frac{r_1+r_2}{|O_1O_2|} + \frac{\Delta x}{\Delta x^2 + \Delta y^2} \frac{k}{|O_1O_2|}</math>
 
:<math> = \frac{k\Delta x + (r_1+r_2)\Delta y}{|O_1O_2|^2}</math>
 
 
Careful! The value of <math>h</math> in this case is not the same as the value of <math>h</math> for the outer tangents.
 
 
====Summary and discussion====
 
We will summarize the results below. (Note that we have exchanged the two circles.) We define <math>h = \sqrt{|O_1O_2|^2 - (r_1-r_2)^2}</math> and <math>k = \sqrt{|O_1O_2|^2 - (r_1+r_2)^2}</math>, and then the points of tangency of the two outer tangents with the first circle are given by:
 
:<math>P_1 = O_1 + \frac{r_1}{|O_1O_2|^2} [(r_1-r_2)\Delta x - h\Delta y, h\Delta x + (r_1-r_2)\Delta y]</math>
 
:<math>P_2 = O_1 + \frac{r_1}{|O_1O_2|^2} [(r_1-r_2)\Delta x + h\Delta y, -h\Delta x + (r_1-r_2)\Delta y]</math>
 
and likewise for the two inner tangents:
 
:<math>P_3 = O_1 + \frac{r_1}{|O_1O_2|^2} [(r_1+r_2)\Delta x - k\Delta y, k\Delta x + (r_1+r_2)\Delta y]</math>
 
:<math>P_4 = O_1 + \frac{r_1}{|O_1O_2|^2} [(r_1+r_2)\Delta x + k\Delta y, -k\Delta x + (r_1+r_2)\Delta y]</math>
 
 
The first pair of formulas will be invalid when <math>|r_1 - r_2| > |O_1O_2|</math>, because <math>h</math> will be undefined. Obviously, in this case, <math>r_1 + r_2 > |O_1O_2|</math> also, so <math>k</math> will also be undefined, and the second pair of formulas will be invalid.
 
 
When <math>|r_1 - r_2| = |O_1O_2|</math>, we will obtain <math>h = 0</math>, so <math>P_1</math> and <math>P_2</math> will coincide. The second pair of formulas will still be invalid, so we will obtain a total of one point of tangency.
 
 
When <math>|r_1 - r_2| < |O_1O_2| < r_1 + r_2</math>, we will obtain <math>h > 0</math>, so <math>P_1</math> and <math>P_2</math> will be distinct, but <math>k</math> will still be undefined, so we obtain a total of two points of tangency.
 
 
When <math>|O_1O_2| = r_1 + r_2</math>, we will obtain <math>h > 0, k = 0</math> giving two distinct points <math>P_1, P_2</math>, but <math>P_3 = P_4</math>, a total of three points of tangency.
 
 
Finally, when <math>|O_1O_2| > r_1 + r_2</math>, then <math>h, k \geq 0</math> and all four points <math>P_1, P_2, P_3, P_4</math> will be distinct, as expected.
 
 
[[Category:Algorithms]]
 
[[Category:Geometry]]
 
[[Category:Pages needing diagrams]]
 

Please note that all contributions to PEGWiki are considered to be released under the Attribution 3.0 Unported (see PEGWiki:Copyrights for details). If you do not want your writing to be edited mercilessly and redistributed at will, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource. Do not submit copyrighted work without permission!

Cancel | Editing help (opens in new window)

Templates used on this page: