<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Line Segment/Circle collision detection?</title>
		<link>http://www.allegro.cc/forums/view/595918</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Thu, 10 Apr 2008 23:05:11 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Can anyone link me to a tutorial about detecting collisions (and calculating responses would also be helpful) between line segments and circles?<br />Thanks.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (James Stanley)</author>
		<pubDate>Wed, 09 Apr 2008 13:18:59 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I think there was recently a thread here somewhere, but I can&#39;t find it now. Personally, I usually work it out every time from first principles.</p><p>The line segment is u + tv, where u and v are vectors and t is a scalar with a value between 0 and 1. The circle is the collection of all points p such that | p - c | = r, where c is a vector, || is the modulus/length operator and r is a scalar.</p><p>So then just solve for | (u + tv) - c | = r. It turns into a quadratic, throw the quadratic formula at it and you can see how you end up with either no solutions for r (the line misses the circle), one solution (the line is a tangent) or two solutions (the line crosses the circle). Check those solutions to see if t is between 0 and 1 inclusive.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Thomas Harte)</author>
		<pubDate>Wed, 09 Apr 2008 15:08:45 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p><a href="http://www.harveycartel.org/metanet/tutorials/tutorialA.html">http://www.harveycartel.org/metanet/tutorials/tutorialA.html</a>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (GullRaDriel)</author>
		<pubDate>Wed, 09 Apr 2008 19:42:56 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I made a post awhile ago detailing how to calculate the distance between a line segment and a point, which can be used for collision detection part... it does give you the point of contact sort of, so you could use it for the response as well.</p><p><a href="http://www.allegro.cc/forums/thread/589720/644831#target">Here</a> it is.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (SiegeLord)</author>
		<pubDate>Wed, 09 Apr 2008 20:26:43 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Thomas, while I believe what you say, I have no idea what that means.<br />Gull, I&#39;ve already seen that page and it meant as much to me as Thomas&#39;s post.<br />SiegeLord, that post is in a language I understand better (code instead of maths <img src="http://www.allegro.cc/forums/smileys/tongue.gif" alt=":P" />). I&#39;ll see about shoehorning that in to my project.<br />Thanks everyone!</p><p>EDIT:<br />SiegeLord, what I&#39;ve found so far is that it only finds the distance between the point and the top-left point on the line. This might be a problem in my code, though.<br />Also, does your code work with negative co-ordinates involved?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (James Stanley)</author>
		<pubDate>Wed, 09 Apr 2008 23:25:26 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I just tested the code, and everything seems to work as it is supposed to. There&#39;s probably some issue in your code... perhaps stemming from my terrible documentation of the algorithm. And yes it is does work with negatives.</p><p>Here&#39;s a better commented version of it, in case it helps:</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td><span class="c">//line segment goes from (x1,y1) to (x2,y2)</span></td></tr><tr><td class="number">2</td><td><span class="c">//the test point is at (x,y)</span></td></tr><tr><td class="number">3</td><td><span class="k1">float</span> A <span class="k3">=</span> x <span class="k3">-</span> x1<span class="k2">;</span><span class="c">//vector from one end point to the test point</span></td></tr><tr><td class="number">4</td><td><span class="k1">float</span> B <span class="k3">=</span> y <span class="k3">-</span> y1<span class="k2">;</span></td></tr><tr><td class="number">5</td><td><span class="k1">float</span> C <span class="k3">=</span> x2 <span class="k3">-</span> x1<span class="k2">;</span><span class="c">//vector from one end point to the other end point</span></td></tr><tr><td class="number">6</td><td><span class="k1">float</span> D <span class="k3">=</span> y2 <span class="k3">-</span> y1<span class="k2">;</span></td></tr><tr><td class="number">7</td><td>&#160;</td></tr><tr><td class="number">8</td><td><span class="k1">float</span> dot <span class="k3">=</span> A <span class="k3">*</span> C <span class="k3">+</span> B <span class="k3">*</span> D<span class="k2">;</span><span class="c">//some interesting math coming from the geometry of the algorithm</span></td></tr><tr><td class="number">9</td><td><span class="k1">float</span> len_sq <span class="k3">=</span> C <span class="k3">*</span> C <span class="k3">+</span> D <span class="k3">*</span> D<span class="k2">;</span></td></tr><tr><td class="number">10</td><td><span class="k1">float</span> param <span class="k3">=</span> dot <span class="k3">/</span> len_sq<span class="k2">;</span></td></tr><tr><td class="number">11</td><td>&#160;</td></tr><tr><td class="number">12</td><td><span class="k1">float</span> xx,yy<span class="k2">;</span><span class="c">//the coordinates of the point on the line segment closest to the test point</span></td></tr><tr><td class="number">13</td><td>&#160;</td></tr><tr><td class="number">14</td><td><span class="c">//the parameter tells us which point to pick</span></td></tr><tr><td class="number">15</td><td><span class="c">//if it is outside 0 to 1 range, we pick one of the endpoints</span></td></tr><tr><td class="number">16</td><td><span class="c">//otherwise we pick a point inside the line segment</span></td></tr><tr><td class="number">17</td><td><span class="k1">if</span><span class="k2">(</span>param <span class="k3">&lt;</span> <span class="n">0</span><span class="k2">)</span></td></tr><tr><td class="number">18</td><td><span class="k2">{</span></td></tr><tr><td class="number">19</td><td>    xx <span class="k3">=</span> x1<span class="k2">;</span></td></tr><tr><td class="number">20</td><td>    yy <span class="k3">=</span> y1<span class="k2">;</span></td></tr><tr><td class="number">21</td><td><span class="k2">}</span></td></tr><tr><td class="number">22</td><td><span class="k1">else</span> <span class="k1">if</span><span class="k2">(</span>param <span class="k3">&gt;</span> <span class="n">1</span><span class="k2">)</span></td></tr><tr><td class="number">23</td><td><span class="k2">{</span></td></tr><tr><td class="number">24</td><td>    xx <span class="k3">=</span> x2<span class="k2">;</span></td></tr><tr><td class="number">25</td><td>    yy <span class="k3">=</span> y2<span class="k2">;</span></td></tr><tr><td class="number">26</td><td><span class="k2">}</span></td></tr><tr><td class="number">27</td><td><span class="k1">else</span></td></tr><tr><td class="number">28</td><td><span class="k2">{</span></td></tr><tr><td class="number">29</td><td>    xx <span class="k3">=</span> x1 <span class="k3">+</span> param <span class="k3">*</span> C<span class="k2">;</span></td></tr><tr><td class="number">30</td><td>    yy <span class="k3">=</span> y1 <span class="k3">+</span> param <span class="k3">*</span> D<span class="k2">;</span></td></tr><tr><td class="number">31</td><td><span class="k2">}</span></td></tr><tr><td class="number">32</td><td>&#160;</td></tr><tr><td class="number">33</td><td><span class="k1">float</span> dist <span class="k3">=</span> dist<span class="k2">(</span>x,y,xx,yy<span class="k2">)</span><span class="k2">;</span><span class="c">//distance from the point to the segment</span></td></tr></tbody></table></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (SiegeLord)</author>
		<pubDate>Thu, 10 Apr 2008 01:24:31 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">SiegeLord said:</div><div class="quote"><p>

</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">float</span> dot <span class="k3">=</span> A <span class="k3">*</span> C <span class="k3">+</span> B <span class="k3">*</span> D<span class="k2">;</span><span class="c">//some interesting math coming from the geometry of the algorithm</span>
<span class="k1">float</span> len_sq <span class="k3">=</span> C <span class="k3">*</span> C <span class="k3">+</span> D <span class="k3">*</span> D<span class="k2">;</span>
<span class="k1">float</span> param <span class="k3">=</span> dot <span class="k3">/</span> len_sq<span class="k2">;</span>
</pre></div></div><p>
</p></div></div><p>
Would that be Pythagoras&#39; theorem?<br />It seems to me that the parameter is the length of the dot product of the vectors (I know of dot products, but don&#39;t understand them - my wording may be unusual/inaccurate), divided by the length of the line segment. Can you explain why this works?</p><p>Also, the dist() function. As far as I can tell, that needs Pythagoras&#39; theorem to calculate the distance. I was using:
</p><div class="source-code snippet"><div class="inner"><pre>xdiff <span class="k3">=</span> x <span class="k3">-</span> xx<span class="k2">;</span>
ydiff <span class="k3">=</span> y <span class="k3">-</span> yy<span class="k2">;</span>
<a href="http://www.delorie.com/djgpp/doc/libc/libc_466.html" target="_blank">hypot</a> <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_738.html" target="_blank">sqrt</a><span class="k2">(</span><span class="k2">(</span>xdiff <span class="k3">*</span> xdiff<span class="k2">)</span> <span class="k3">+</span> <span class="k2">(</span>ydiff <span class="k3">*</span> ydiff<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>
That seem about right to you?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (James Stanley)</author>
		<pubDate>Thu, 10 Apr 2008 02:03:09 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>My thoughts, turned into code:</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td><span class="p">#define NO_COLLISION -1</span></td></tr><tr><td class="number">2</td><td>&#160;</td></tr><tr><td class="number">3</td><td><span class="k1">float</span> test_line_against_circle<span class="k2">(</span><span class="k1">float</span> <span class="k3">*</span>CircleCentre, <span class="k1">float</span> CircleRadius, <span class="k1">float</span> <span class="k3">*</span>LineStart, <span class="k1">float</span> <span class="k3">*</span>LineEnd<span class="k2">)</span></td></tr><tr><td class="number">4</td><td><span class="k2">{</span></td></tr><tr><td class="number">5</td><td>   <span class="k1">float</span> LineVec<span class="k2">[</span><span class="n">2</span><span class="k2">]</span> <span class="k3">=</span> <span class="k2">{</span>LineEnd<span class="k2">[</span><span class="n">0</span><span class="k2">]</span> <span class="k3">-</span> LineStart<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>, LineEnd<span class="k2">[</span><span class="n">1</span><span class="k2">]</span> <span class="k3">-</span> LineStart<span class="k2">[</span><span class="n">1</span><span class="k2">]</span><span class="k2">}</span><span class="k2">;</span></td></tr><tr><td class="number">6</td><td>   <span class="k1">float</span> VecToLine<span class="k2">[</span><span class="n">2</span><span class="k2">]</span> <span class="k3">=</span> <span class="k2">{</span>LineStart<span class="k2">[</span><span class="n">0</span><span class="k2">]</span> <span class="k3">-</span> CircleCentre<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>, LineStart<span class="k2">[</span><span class="n">1</span><span class="k2">]</span> <span class="k3">-</span> CircleCentre<span class="k2">[</span><span class="n">1</span><span class="k2">]</span><span class="k2">}</span><span class="k2">;</span></td></tr><tr><td class="number">7</td><td>&#160;</td></tr><tr><td class="number">8</td><td>   <span class="c">/* create a quadratic formula of the form ax^2 + bx + c = 0 */</span></td></tr><tr><td class="number">9</td><td>   <span class="k1">float</span> a, b, c<span class="k2">;</span></td></tr><tr><td class="number">10</td><td>   <span class="k1">float</span> sqrtterm, res1, res2<span class="k2">;</span></td></tr><tr><td class="number">11</td><td>&#160;</td></tr><tr><td class="number">12</td><td>   a <span class="k3">=</span> LineVec<span class="k2">[</span><span class="n">0</span><span class="k2">]</span><span class="k3">*</span>LineVec<span class="k2">[</span><span class="n">0</span><span class="k2">]</span> <span class="k3">+</span> LineVec<span class="k2">[</span><span class="n">1</span><span class="k2">]</span><span class="k3">*</span>LineVec<span class="k2">[</span><span class="n">1</span><span class="k2">]</span><span class="k2">;</span></td></tr><tr><td class="number">13</td><td>   b <span class="k3">=</span> <span class="n">2</span> <span class="k3">*</span> <span class="k2">(</span> VecToLine<span class="k2">[</span><span class="n">0</span><span class="k2">]</span><span class="k3">*</span>LineVec<span class="k2">[</span><span class="n">0</span><span class="k2">]</span> <span class="k3">+</span> VecToLine<span class="k2">[</span><span class="n">1</span><span class="k2">]</span><span class="k3">*</span>LineVec<span class="k2">[</span><span class="n">1</span><span class="k2">]</span> <span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">14</td><td>   c <span class="k3">=</span> <span class="k2">(</span> VecToLine<span class="k2">[</span><span class="n">0</span><span class="k2">]</span><span class="k3">*</span>VecToLine<span class="k2">[</span><span class="n">0</span><span class="k2">]</span> <span class="k3">+</span> VecToLine<span class="k2">[</span><span class="n">1</span><span class="k2">]</span><span class="k3">*</span>VecToLine<span class="k2">[</span><span class="n">1</span><span class="k2">]</span><span class="k2">)</span> <span class="k3">-</span> CircleRadius<span class="k3">*</span>CircleRadius<span class="k2">;</span></td></tr><tr><td class="number">15</td><td>&#160;</td></tr><tr><td class="number">16</td><td>   <span class="c">/* solve for t */</span></td></tr><tr><td class="number">17</td><td>   sqrtterm <span class="k3">=</span> b<span class="k3">*</span>b <span class="k3">-</span> <span class="n">4</span><span class="k3">*</span>a<span class="k3">*</span>c<span class="k2">;</span></td></tr><tr><td class="number">18</td><td>&#160;</td></tr><tr><td class="number">19</td><td>   <span class="c">/* if the term we intend to square root is less than 0 then the answer won't be real, so it definitely won't be t in the range 0 to 1 */</span></td></tr><tr><td class="number">20</td><td>   <span class="k1">if</span><span class="k2">(</span>sqrtterm <span class="k3">&lt;</span> <span class="n">0</span><span class="k2">)</span> <span class="k1">return</span> NO_COLLISION<span class="k2">;</span></td></tr><tr><td class="number">21</td><td>&#160;</td></tr><tr><td class="number">22</td><td>   <span class="c">/* if we can assume that the line segment starts outside the circle (e.g. for continuous time collision detection) then the following can be skipped and we can just return the equivalent of res1 */</span></td></tr><tr><td class="number">23</td><td>   sqrtterm <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_738.html" target="_blank">sqrt</a><span class="k2">(</span>sqrtterm<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">24</td><td>   res1 <span class="k3">=</span> <span class="k2">(</span> <span class="k3">-</span>b <span class="k3">-</span> sqrtterm <span class="k2">)</span> <span class="k3">/</span> <span class="k2">(</span><span class="n">2</span> <span class="k3">*</span> a<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">25</td><td>   res2 <span class="k3">=</span> <span class="k2">(</span> <span class="k3">-</span>b <span class="k3">+</span> sqrtterm <span class="k2">)</span> <span class="k3">/</span> <span class="k2">(</span><span class="n">2</span> <span class="k3">*</span> a<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">26</td><td>&#160;</td></tr><tr><td class="number">27</td><td>   <span class="k1">if</span><span class="k2">(</span>res1 <span class="k3">&gt;</span><span class="k3">=</span> <span class="n">0</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> res1 <span class="k3">&lt;</span><span class="k3">=</span> <span class="n">1</span><span class="k2">)</span> <span class="k1">return</span> res1<span class="k2">;</span></td></tr><tr><td class="number">28</td><td>   <span class="k1">return</span> res2<span class="k2">;</span></td></tr><tr><td class="number">29</td><td><span class="k2">}</span></td></tr><tr><td class="number">30</td><td>&#160;</td></tr><tr><td class="number">31</td><td>...</td></tr><tr><td class="number">32</td><td><span class="k1">float</span> InterceptTime<span class="k2">;</span></td></tr><tr><td class="number">33</td><td>InterceptTime <span class="k3">=</span> test_line_against_circle<span class="k2">(</span>CircleCentre, CircleRadius, LineStart, LineEnd<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">34</td><td>&#160;</td></tr><tr><td class="number">35</td><td><span class="k1">if</span><span class="k2">(</span>InterceptTime <span class="k3">&gt;</span><span class="k3">=</span> <span class="n">0</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> InterceptTime <span class="k3">&lt;</span><span class="k3">=</span> <span class="n">1</span><span class="k2">)</span></td></tr><tr><td class="number">36</td><td><span class="k2">{</span></td></tr><tr><td class="number">37</td><td>   <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"interception!\n"</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">38</td><td>   <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"at position: (%0.2f, %0.2f)\n"</span>, LineStart<span class="k2">[</span><span class="n">0</span><span class="k2">]</span> <span class="k3">+</span> InterceptTime <span class="k3">*</span> <span class="k2">(</span>LineEnd<span class="k2">[</span><span class="n">0</span><span class="k2">]</span> <span class="k3">-</span> LineStart<span class="k2">[</span><span class="n">0</span><span class="k2">]</span><span class="k2">)</span>, LineStart<span class="k2">[</span><span class="n">1</span><span class="k2">]</span> <span class="k3">+</span> InterceptTime <span class="k3">*</span> <span class="k2">(</span>LineEnd<span class="k2">[</span><span class="n">1</span><span class="k2">]</span> <span class="k3">-</span> LineStart<span class="k2">[</span><span class="n">1</span><span class="k2">]</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">39</td><td><span class="k2">}</span></td></tr><tr><td class="number">40</td><td>...</td></tr></tbody></table></div></div><p>

You know, completely untested, just worked out on a piece of paper, etc.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Thomas Harte)</author>
		<pubDate>Thu, 10 Apr 2008 15:29:17 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I&#39;m going to try implementing that now.<br />Thanks!</p><p>EDIT:<br />That has the same problem as the other code - it only detects collisions with the line start point.<br />I&#39;m sure it&#39;s me doing something wrong, but I can&#39;t think what it is.</p><p>EDIT2:<br />These snippets don&#39;t depend on C++, do they?<br />I&#39;m running C, but I don&#39;t see how that would affect anything.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (James Stanley)</author>
		<pubDate>Thu, 10 Apr 2008 15:37:49 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
That has the same problem as the other code - it only detects collisions with the line start point.
</p></div></div><p>
No it doesn&#39;t. What gives you that impression? Have you tested and discovered a mistake in my coding, or are you saying that just from reading it?</p><p>EDIT: and SiegeLord&#39;s shouldn&#39;t either. Are you sure you aren&#39;t feeding incorrect numbers into your program somewhere?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Thomas Harte)</author>
		<pubDate>Thu, 10 Apr 2008 15:54:41 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
Can you explain why this works?
</p></div></div><p>

Here&#39;s a rough outline of how it works. First, we form the two vectors, one that is the line segment, and the other one that goes from one endpoint of the segment to the center of the circle. Note that they share the same starting vertex. Now, we take the dot product of the two vectors, which roughly represents the projection of one vector onto the other.<br /> <br /> <br /><img class="math" src="http://www.allegro.cc/images/tex/7/7/77cea149679873620d0dffee02f548cc-96.png" alt="&lt;math&gt;projection = \vec v_{pt} \cdot \vec v_{seg}&lt;/math&gt;" /></p><p>Now, our goal is to get a normalized projection, i.e. such that if the point is directly above or below the segment vector we will get a parameter to be between 0 and 1. We accomplish this in two steps. First, we divide once by the length of <img class="math" src="http://www.allegro.cc/images/tex/c/a/ca1ba84d12cb089616155a67fd01b43c-96.png" alt="&lt;math&gt;\vec v_{seg}&lt;/math&gt;" />. This gives us the magnitude of the projected point vector... basically as if it was casting a shadow onto the segment vector. Now, we divide that number again by the length of the <img class="math" src="http://www.allegro.cc/images/tex/c/a/ca1ba84d12cb089616155a67fd01b43c-96.png" alt="&lt;math&gt;\vec v_{seg}&lt;/math&gt;" /> to normalize the parameter. Why? Because clearly if the shadow of the vector is less than the length of the segment vector, we should get a number less than one. It does not take too much imagination to see that this relationship is linear. In any event, here&#39;s the net formula:</p><p><img class="math" src="http://www.allegro.cc/images/tex/1/e/1e7666f0395f3cfcb04baa91423a1205-96.png" alt="&lt;math&gt;param = \frac {\vec v_{pt} \cdot \vec v_{seg}} {\left \Vert \vec v_{seg} \right \|^2}&lt;/math&gt;" /></p><p>Which nicely corresponds to the code. Note that we avoid taking the square root because we divide twice by the length, hence the variable being the length-squared.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (SiegeLord)</author>
		<pubDate>Thu, 10 Apr 2008 20:42:05 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
No it doesn&#39;t. What gives you that impression?
</p></div></div><p>
Read the line after the one you quoted <img src="http://www.allegro.cc/forums/smileys/wink.gif" alt=";)" />.<br />I&#39;m sure your code probably works fine, it&#39;s just that my usage of it means that it only detects collisions with the start point.
</p><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
Are you sure you aren&#39;t feeding incorrect numbers into your program somewhere?
</p></div></div><p>
I&#39;m certain that I am. Problem is, I&#39;ve checked them all and they all seem right.</p><p>SiegeLord, that kinda makes sense. It seems to be a similar algorithm to Thomas Harte&#39;s, except you have the param thing and he has the quadratic formula.</p><p>EDIT:<br />Both functions work on the few test cases I just tried, I just can&#39;t make them work in the game.</p><p>EDIT2:<br />I just made it print out the exact numbers it was giving the functions, and they seemed right.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (James Stanley)</author>
		<pubDate>Thu, 10 Apr 2008 23:05:11 +0000</pubDate>
	</item>
</rss>

