[几何公式]点到直线的距离
【问题描述】:求p1到线段lp1-lp2的距离。其中p1、lp1、lp2都是点,lp1、lp2是直线上的两个点,p1是直线外的点。已知的是这3个点的坐标。
【问题分析】:点到直线的距离可以用下面的公式求得:

现在问题就转换成了求出A、B和C来,也就是把直线的两点式转换成一般式。
代码如下
ActionScript Code:
- // @p.s. 直线公式用两点式转换成一般式
- // @param p1:线外的点
- // @param lp1: 线的起点
- // @param lp2: 线的终点
- // @return 距离
- function point2Line(p1:Object, lp1:Object, lp2:Object):Number
- {
- var a, b, c;
- // 化简两点式为一般式
- // 两点式公式为(y - y1)/(x - x1) = (y2 - y1)/ (x2 - x1)
- // 化简为一般式为(y2 - y1)x + (x1 - x2)y + (x2y1 - x1y2) = 0
- // A = y2 - y1
- // B = x1 - x2
- // C = x2y1 - x1y2
- a = lp2.y - lp1.y;
- b = lp1.x - lp2.x;
- c = lp2.x * lp1.y - lp1.x * lp2.y;
- // 距离公式为d = |A*x0 + B*y0 + C|/√(A^2 + B^2)
- var d = Math.abs(a * p1.x + b * p1.y + c) / Math.sqrt(a * a + b * b);
- return d;
- };
为了以后使用方便,还是把它加入到_global对象中去
ActionScript Code:
- #initclip 15
- _global.geomObj = new Object()
- // ++++++++++++++++计算点到直线的距离+++++++++++++++++++++++++++
- // @p.s. 直线公式用两点式转换成一般式
- // @param p1:线外的点
- // @param lp1: 线的起点
- // @param lp2: 线的终点
- // @return 距离
- _global.geomObj.point2Line = function(p1:Object, lp1:Object, lp2:Object):Number
- {
- var a, b, c;
- // 化简两点式为一般式
- // 两点式公式为(y - y1)/(x - x1) = (y2 - y1)/ (x2 - x1)
- // 化简为一般式为(y2 - y1)x + (x1 - x2)y + (x2y1 - x1y2) = 0
- // A = y2 - y1
- // B = x1 - x2
- // C = x2y1 - x1y2
- a = lp2.y - lp1.y;
- b = lp1.x - lp2.x;
- c = lp2.x * lp1.y - lp1.x * lp2.y;
- // 距离公式为d = |A*x0 + B*y0 + C|/√(A^2 + B^2)
- var d = Math.abs(a * p1.x + b * p1.y + c) / Math.sqrt(a * a + b * b);
- return d;
- };
- #endinitclip

Leave a Reply