<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Comments on: Calculating the Distance from a Point to a Line in AS3</title>
	<atom:link href="http://www.baconandgames.com/2010/03/04/calculating-the-distance-from-a-point-to-a-line-in-as3/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.baconandgames.com/2010/03/04/calculating-the-distance-from-a-point-to-a-line-in-as3/</link>
	<description>together at last</description>
	<lastBuildDate>Mon, 23 Jan 2012 21:45:25 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
	<item>
		<title>By: Tomasz Dysinski</title>
		<link>http://www.baconandgames.com/2010/03/04/calculating-the-distance-from-a-point-to-a-line-in-as3/comment-page-1/#comment-359</link>
		<dc:creator>Tomasz Dysinski</dc:creator>
		<pubDate>Mon, 23 Jan 2012 21:45:25 +0000</pubDate>
		<guid isPermaLink="false">http://www.baconandgames.com/?p=200#comment-359</guid>
		<description>I&#039;m sorry to spam your board but it turns out my second revision doesn&#039;t work when it&#039;s away from the origin (0,0).

I finally have a version that gives me the answer I need in all cases :)
Note that I removed the line that flips y and simplified B, d, and e.

		public function getDistanceFromLine(a:Point, b:Point, c:Point, as_seg:Boolean = false):Object {
			var obj:Object = new Object();
			obj.dist = -1;
			obj.poi = new Point();
			if (a.x == b.x) {
				obj.dist = Math.abs(a.x - c.x);
				obj.poi.x = a.x;
				obj.poi.y = c.y;
				return obj;
			}else if (a.y == b.y) {
				obj.dist = Math.abs(a.y - c.y);
				obj.poi.x = c.x;
				obj.poi.y = a.y;
				return obj;
			}
			var m:Number = (a.y - b.y) / (a.x - b.x);
			var B:Number = 1 / m;
			var d:Point = new Point(c.x + m, c.y);
			var e:Point = new Point(c.x, c.y + B);
			var poi:Point = lineIntersectLine(a, b, d, e, as_seg); // use Keith&#039;s function to check for an intersection
			if(poi != null){
				var dx:Number = poi.x - c.x;
				var dy:Number = poi.y - c.y;
				obj.dist = Math.pow(dx * dx + dy * dy, .5);
				obj.poi = poi;
			}
			return obj;
		}

Cheers,

Tomasz</description>
		<content:encoded><![CDATA[<p>I&#8217;m sorry to spam your board but it turns out my second revision doesn&#8217;t work when it&#8217;s away from the origin (0,0).</p>
<p>I finally have a version that gives me the answer I need in all cases :)<br />
Note that I removed the line that flips y and simplified B, d, and e.</p>
<p>		public function getDistanceFromLine(a:Point, b:Point, c:Point, as_seg:Boolean = false):Object {<br />
			var obj:Object = new Object();<br />
			obj.dist = -1;<br />
			obj.poi = new Point();<br />
			if (a.x == b.x) {<br />
				obj.dist = Math.abs(a.x &#8211; c.x);<br />
				obj.poi.x = a.x;<br />
				obj.poi.y = c.y;<br />
				return obj;<br />
			}else if (a.y == b.y) {<br />
				obj.dist = Math.abs(a.y &#8211; c.y);<br />
				obj.poi.x = c.x;<br />
				obj.poi.y = a.y;<br />
				return obj;<br />
			}<br />
			var m:Number = (a.y &#8211; b.y) / (a.x &#8211; b.x);<br />
			var B:Number = 1 / m;<br />
			var d:Point = new Point(c.x + m, c.y);<br />
			var e:Point = new Point(c.x, c.y + B);<br />
			var poi:Point = lineIntersectLine(a, b, d, e, as_seg); // use Keith&#8217;s function to check for an intersection<br />
			if(poi != null){<br />
				var dx:Number = poi.x &#8211; c.x;<br />
				var dy:Number = poi.y &#8211; c.y;<br />
				obj.dist = Math.pow(dx * dx + dy * dy, .5);<br />
				obj.poi = poi;<br />
			}<br />
			return obj;<br />
		}</p>
<p>Cheers,</p>
<p>Tomasz</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Tomasz Dysinski</title>
		<link>http://www.baconandgames.com/2010/03/04/calculating-the-distance-from-a-point-to-a-line-in-as3/comment-page-1/#comment-358</link>
		<dc:creator>Tomasz Dysinski</dc:creator>
		<pubDate>Mon, 23 Jan 2012 20:43:40 +0000</pubDate>
		<guid isPermaLink="false">http://www.baconandgames.com/?p=200#comment-358</guid>
		<description>LOL.
I&#039;m sorry but the fix I posted is bollocks.
I ran it on my full data set and discovering this only after posting
Here&#039;s a method that works :)

		public function getDistanceFromLine(a:Point,b:Point,c:Point,as_seg:Boolean=false):Object{
			var obj:Object = new Object();
			obj.dist = -1;
			obj.poi = new Point();	
			if (a.x == b.x) {
				obj.dist = Math.abs(a.x - c.x);
				obj.poi.x = a.x;
				obj.poi.y = c.y;
				return obj;
			}else if (a.y == b.y) {
				obj.dist = Math.abs(a.y - c.y);
				obj.poi.x = c.x;
				obj.poi.y = a.y;
				return obj;
			}
			var m:Number = (a.y - b.y) / (a.x - b.x);
			var B:Number = (1 / m) * c.x - c.y;
			var d:Point = new Point(b.x, b.x * ( -1 / m) + B);
			var e:Point = new Point(a.x, a.x * ( -1 / m) + B);
			var poi:Point = lineIntersectLine(a, b, d, e, as_seg); // use Keith&#039;s function to check for an intersection
			if(poi != null){
				var dx:Number = poi.x - c.x;
				var dy:Number = poi.y + c.y;
				obj.dist = Math.pow(dx * dx + dy * dy, .5);
				obj.poi = poi;
			}
			return obj;
		}

Thanks again</description>
		<content:encoded><![CDATA[<p>LOL.<br />
I&#8217;m sorry but the fix I posted is bollocks.<br />
I ran it on my full data set and discovering this only after posting<br />
Here&#8217;s a method that works :)</p>
<p>		public function getDistanceFromLine(a:Point,b:Point,c:Point,as_seg:Boolean=false):Object{<br />
			var obj:Object = new Object();<br />
			obj.dist = -1;<br />
			obj.poi = new Point();<br />
			if (a.x == b.x) {<br />
				obj.dist = Math.abs(a.x &#8211; c.x);<br />
				obj.poi.x = a.x;<br />
				obj.poi.y = c.y;<br />
				return obj;<br />
			}else if (a.y == b.y) {<br />
				obj.dist = Math.abs(a.y &#8211; c.y);<br />
				obj.poi.x = c.x;<br />
				obj.poi.y = a.y;<br />
				return obj;<br />
			}<br />
			var m:Number = (a.y &#8211; b.y) / (a.x &#8211; b.x);<br />
			var B:Number = (1 / m) * c.x &#8211; c.y;<br />
			var d:Point = new Point(b.x, b.x * ( -1 / m) + B);<br />
			var e:Point = new Point(a.x, a.x * ( -1 / m) + B);<br />
			var poi:Point = lineIntersectLine(a, b, d, e, as_seg); // use Keith&#8217;s function to check for an intersection<br />
			if(poi != null){<br />
				var dx:Number = poi.x &#8211; c.x;<br />
				var dy:Number = poi.y + c.y;<br />
				obj.dist = Math.pow(dx * dx + dy * dy, .5);<br />
				obj.poi = poi;<br />
			}<br />
			return obj;<br />
		}</p>
<p>Thanks again</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Sean James McKenzie</title>
		<link>http://www.baconandgames.com/2010/03/04/calculating-the-distance-from-a-point-to-a-line-in-as3/comment-page-1/#comment-357</link>
		<dc:creator>Sean James McKenzie</dc:creator>
		<pubDate>Mon, 23 Jan 2012 19:38:35 +0000</pubDate>
		<guid isPermaLink="false">http://www.baconandgames.com/?p=200#comment-357</guid>
		<description>I can&#039;t believe I missed that. I will update my code. Nice catch :)</description>
		<content:encoded><![CDATA[<p>I can&#8217;t believe I missed that. I will update my code. Nice catch :)</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Tomasz Dysinski</title>
		<link>http://www.baconandgames.com/2010/03/04/calculating-the-distance-from-a-point-to-a-line-in-as3/comment-page-1/#comment-356</link>
		<dc:creator>Tomasz Dysinski</dc:creator>
		<pubDate>Mon, 23 Jan 2012 16:50:53 +0000</pubDate>
		<guid isPermaLink="false">http://www.baconandgames.com/?p=200#comment-356</guid>
		<description>Hey!
There&#039;s a problem when the slope is perfectly vertical or horizontal.
Here&#039;s one way to catch it and get usable results:

		public function getDistanceFromLine(a:Point,b:Point,c:Point,as_seg:Boolean=false):Object{
			c.y *= -1; // flip for Flash
			var obj:Object = new Object();
			obj.dist = -1;
			obj.pt = new Point();			
			var m:Number = (a.y - b.y) / (a.x - b.x);
			var B:Number = (1 / m) * c.x - c.y;
			var d:Point;
			var e:Point;
			if (m == Infinity &#124;&#124; m == -Infinity)
			{
				d = new Point(c.x+1, c.y);
				e = new Point(c.x-1, c.y);
			}else if (B == Infinity &#124;&#124; B == -Infinity)
			{
				d = new Point(c.x, c.y + 1);
				e = new Point(c.x, c.y - 1);
			}else
			{
				d = new Point(b.x, b.x * ( -1 / m) + B);
				e = new Point(a.x, a.x * ( -1 / m) + B);
			}
			var poi:Point = lineIntersectLine(a, b, d, e, as_seg); // use Keith&#039;s function to check for an intersection
			if(poi != null){
				var dx:Number = poi.x - c.x;
				var dy:Number = poi.y + c.y;
				obj.dist = Math.pow(dx * dx + dy * dy, .5);
				obj.poi = poi;
			}
			return obj;
		}

Thanks for sharing!</description>
		<content:encoded><![CDATA[<p>Hey!<br />
There&#8217;s a problem when the slope is perfectly vertical or horizontal.<br />
Here&#8217;s one way to catch it and get usable results:</p>
<p>		public function getDistanceFromLine(a:Point,b:Point,c:Point,as_seg:Boolean=false):Object{<br />
			c.y *= -1; // flip for Flash<br />
			var obj:Object = new Object();<br />
			obj.dist = -1;<br />
			obj.pt = new Point();<br />
			var m:Number = (a.y &#8211; b.y) / (a.x &#8211; b.x);<br />
			var B:Number = (1 / m) * c.x &#8211; c.y;<br />
			var d:Point;<br />
			var e:Point;<br />
			if (m == Infinity || m == -Infinity)<br />
			{<br />
				d = new Point(c.x+1, c.y);<br />
				e = new Point(c.x-1, c.y);<br />
			}else if (B == Infinity || B == -Infinity)<br />
			{<br />
				d = new Point(c.x, c.y + 1);<br />
				e = new Point(c.x, c.y &#8211; 1);<br />
			}else<br />
			{<br />
				d = new Point(b.x, b.x * ( -1 / m) + B);<br />
				e = new Point(a.x, a.x * ( -1 / m) + B);<br />
			}<br />
			var poi:Point = lineIntersectLine(a, b, d, e, as_seg); // use Keith&#8217;s function to check for an intersection<br />
			if(poi != null){<br />
				var dx:Number = poi.x &#8211; c.x;<br />
				var dy:Number = poi.y + c.y;<br />
				obj.dist = Math.pow(dx * dx + dy * dy, .5);<br />
				obj.poi = poi;<br />
			}<br />
			return obj;<br />
		}</p>
<p>Thanks for sharing!</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Sean James McKenzie</title>
		<link>http://www.baconandgames.com/2010/03/04/calculating-the-distance-from-a-point-to-a-line-in-as3/comment-page-1/#comment-346</link>
		<dc:creator>Sean James McKenzie</dc:creator>
		<pubDate>Wed, 14 Dec 2011 15:55:21 +0000</pubDate>
		<guid isPermaLink="false">http://www.baconandgames.com/?p=200#comment-346</guid>
		<description>Thanks for the comment. This function is slightly different, as it does not allow you to extend the segment indefinitely, if you for example wanted to know if the point was not off of the line but the infinite line your segment lies on. If you don&#039;t need that, then the above function is certainly leaner.</description>
		<content:encoded><![CDATA[<p>Thanks for the comment. This function is slightly different, as it does not allow you to extend the segment indefinitely, if you for example wanted to know if the point was not off of the line but the infinite line your segment lies on. If you don&#8217;t need that, then the above function is certainly leaner.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Per</title>
		<link>http://www.baconandgames.com/2010/03/04/calculating-the-distance-from-a-point-to-a-line-in-as3/comment-page-1/#comment-345</link>
		<dc:creator>Per</dc:creator>
		<pubDate>Wed, 14 Dec 2011 13:59:02 +0000</pubDate>
		<guid isPermaLink="false">http://www.baconandgames.com/?p=200#comment-345</guid>
		<description>Hi,

I was struggling to make your code work, so I went back to searching the internet, and found this much shorter function that does the same:

		public function PointToLineDistance(p1:Point, p2:Point, p3:Point):Object
		{
			var xDelta:Number = p2.x - p1.x;
			var yDelta:Number = p2.y - p1.y;
			if ((xDelta == 0) &amp;&amp; (yDelta == 0))
			{
				// p1 and p2 cannot be the same point
				p2.x += 1;
				p2.y += 1;
				xDelta = 1;
				yDelta = 1;
			}
			var u:Number = ((p3.x - p1.x) * xDelta + (p3.y - p1.y) * yDelta) / (xDelta * xDelta + yDelta * yDelta);
			var closestPoint:Point;
			var obj:Object = new Object;

			if (u  1)
			{
				obj.dist = -1;
			}
			else
			{
				closestPoint = new Point(p1.x + u * xDelta, p1.y + u * yDelta);
				obj.dist = Point.distance(closestPoint, new Point(p3.x, p3.y));
				obj.closest = closestPoint;
			}
			return obj;
		}</description>
		<content:encoded><![CDATA[<p>Hi,</p>
<p>I was struggling to make your code work, so I went back to searching the internet, and found this much shorter function that does the same:</p>
<p>		public function PointToLineDistance(p1:Point, p2:Point, p3:Point):Object<br />
		{<br />
			var xDelta:Number = p2.x &#8211; p1.x;<br />
			var yDelta:Number = p2.y &#8211; p1.y;<br />
			if ((xDelta == 0) &amp;&amp; (yDelta == 0))<br />
			{<br />
				// p1 and p2 cannot be the same point<br />
				p2.x += 1;<br />
				p2.y += 1;<br />
				xDelta = 1;<br />
				yDelta = 1;<br />
			}<br />
			var u:Number = ((p3.x &#8211; p1.x) * xDelta + (p3.y &#8211; p1.y) * yDelta) / (xDelta * xDelta + yDelta * yDelta);<br />
			var closestPoint:Point;<br />
			var obj:Object = new Object;</p>
<p>			if (u  1)<br />
			{<br />
				obj.dist = -1;<br />
			}<br />
			else<br />
			{<br />
				closestPoint = new Point(p1.x + u * xDelta, p1.y + u * yDelta);<br />
				obj.dist = Point.distance(closestPoint, new Point(p3.x, p3.y));<br />
				obj.closest = closestPoint;<br />
			}<br />
			return obj;<br />
		}</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: gui</title>
		<link>http://www.baconandgames.com/2010/03/04/calculating-the-distance-from-a-point-to-a-line-in-as3/comment-page-1/#comment-302</link>
		<dc:creator>gui</dc:creator>
		<pubDate>Wed, 16 Mar 2011 13:47:49 +0000</pubDate>
		<guid isPermaLink="false">http://www.baconandgames.com/?p=200#comment-302</guid>
		<description>Thanks for this!</description>
		<content:encoded><![CDATA[<p>Thanks for this!</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: long beach</title>
		<link>http://www.baconandgames.com/2010/03/04/calculating-the-distance-from-a-point-to-a-line-in-as3/comment-page-1/#comment-166</link>
		<dc:creator>long beach</dc:creator>
		<pubDate>Mon, 15 Nov 2010 13:52:44 +0000</pubDate>
		<guid isPermaLink="false">http://www.baconandgames.com/?p=200#comment-166</guid>
		<description>you made my day! thank youuuuuuuuuuuuuuuuuu!!!
very usefullllllllllllllll</description>
		<content:encoded><![CDATA[<p>you made my day! thank youuuuuuuuuuuuuuuuuu!!!<br />
very usefullllllllllllllll</p>
]]></content:encoded>
	</item>
</channel>
</rss>

