I Love China

技术·人生

技术服务生活
繁體
5月 16th, 2007

[几何公式]点到直线的距离

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

现在问题就转换成了求出A、B和C来,也就是把直线的两点式转换成一般式。
代码如下

ActionScript Code:
  1. // @p.s. 直线公式用两点式转换成一般式
  2. // @param p1:线外的点
  3. // @param lp1: 线的起点
  4. // @param lp2: 线的终点
  5. // @return 距离
  6. function point2Line(p1:Object, lp1:Object, lp2:Object):Number
  7. {
  8.     var a, b, c;
  9.     // 化简两点式为一般式
  10.     // 两点式公式为(y - y1)/(x - x1) = (y2 - y1)/ (x2 - x1)
  11.     // 化简为一般式为(y2 - y1)x + (x1 - x2)y + (x2y1 - x1y2) = 0
  12.     // A = y2 - y1
  13.     // B = x1 - x2
  14.     // C = x2y1 - x1y2
  15.     a = lp2.y - lp1.y;
  16.     b = lp1.x - lp2.x;
  17.     c = lp2.x * lp1.y - lp1.x * lp2.y;
  18.     // 距离公式为d = |A*x0 + B*y0 + C|/√(A^2 + B^2)
  19.     var d = Math.abs(a * p1.x + b * p1.y + c) / Math.sqrt(a * a + b * b);
  20.     return d;
  21. };

为了以后使用方便,还是把它加入到_global对象中去

ActionScript Code:
  1. #initclip 15
  2. _global.geomObj = new Object()
  3. // ++++++++++++++++计算点到直线的距离+++++++++++++++++++++++++++
  4. // @p.s. 直线公式用两点式转换成一般式
  5. // @param p1:线外的点
  6. // @param lp1: 线的起点
  7. // @param lp2: 线的终点
  8. // @return 距离
  9. _global.geomObj.point2Line = function(p1:Object, lp1:Object, lp2:Object):Number
  10. {
  11.     var a, b, c;
  12.     // 化简两点式为一般式
  13.     // 两点式公式为(y - y1)/(x - x1) = (y2 - y1)/ (x2 - x1)
  14.     // 化简为一般式为(y2 - y1)x + (x1 - x2)y + (x2y1 - x1y2) = 0
  15.     // A = y2 - y1
  16.     // B = x1 - x2
  17.     // C = x2y1 - x1y2
  18.     a = lp2.y - lp1.y;
  19.     b = lp1.x - lp2.x;
  20.     c = lp2.x * lp1.y - lp1.x * lp2.y;
  21.     // 距离公式为d = |A*x0 + B*y0 + C|/√(A^2 + B^2)
  22.     var d = Math.abs(a * p1.x + b * p1.y + c) / Math.sqrt(a * a + b * b);
  23.     return d;
  24. };
  25. #endinitclip

随机文章:

Leave a Reply