求点到直线的最短距离及垂足

一、根据两点求直线方程

已知直线上两点为:(x1,x2),(y1,y2);

设方程为:Ax+By+C=0;

1. 求斜率:k=(y2-y1)/(x2-x1);

2. 直线方程为: y-y1=k(x-x1);

换算得:kx-y+y1-kx1=0,即:

A=k
B=-1
C=y1-kx1=y1-(y2-y1)/(x2-x1)*x1

二、求距离和垂足公式

1. 点(x0,y0)到直线的距离公式为:

d=abs(Ax0+By0+C)/sqrt(A*A+B*B);

2. 设垂足为p,则:

p.x=(B*B*x0-A*B*y0-A*C)/(A*A+B*B)
p.y=(A*A*y0-A*B*x0-B*C)/(A*A+B*B) 

三、 代码

输入点和线段,返回距离和垂足

 1 function getDistanceP2L(point,line){
 2
 3 var x1=line.startPoint.x;
 4 var y1=line.startPoint.y;
 5 var x2=line.endPoint.x;
 6 var y2=line.endPoint.y;
 7 var x0=point.x;
 8 var y0=point.y;
 9
10 var k=x1==x2?10000:(y2-y1)/(x2-x1);//当x1=x2时,给斜率设一个较大值10000
11 var a=k;
12 var b=-1;
13 var c=y1-k*x1;
14
15 var d=Math.abs(a*x0+b*y0+c)/Math.sqrt(a*a+b*b);
16
17 var px=(b*b*x0-a*b*y0-a*c)/(a*a+b*b);
18 var py=(a*a*y0-a*b*x0-b*c)/(a*a+b*b);
19 var p=new Point(px,py);
20
21 return [d,p];
22 }

原文地址:https://www.cnblogs.com/snsart/p/10954593.html

时间: 2024-10-03 23:27:09

求点到直线的最短距离及垂足的相关文章

求解点关于直线的距离、垂足、对称点公式

下面通过两种直线方程的形式,求解点关于直线的距离.垂足.对称点公式. 问题描述1: 已知点的坐标(x0,y0),直线的方程为Ax+By+C = 0: 求点到直线上的距离d.点在直线上的垂足(x, y).点关于直线的对称点(x’, y’). 解决方法: (1)距离: d = ( Ax0 + By0 + C ) / sqrt ( A*A + B*B ); 这个“距离”有符号,表示点在直线的上方或者下方,取绝对值表示欧式距离. (2)垂足: 求解两个方程: (a) Ax + By + C = 0; (

点到直线方程的距离、垂足、对称点

问题描述1: 已知点的坐标(x0,y0),直线的方程为Ax+By+C = 0:求点到直线上的距离d.点在直线上的垂足(x, y).点关于直线的对称点(x’, y‘). 解决方法: (1)距离: d = ( Ax0 + By0 + C ) / sqrt ( A*A + B*B ); 这个“距离”有符号,表示点在直线的上方或者下方,取绝对值表示欧式距离. (2)垂足: 求解两个方程:(a).Ax + By + C = 0;(b).(y - y0) / (x - x0) = B / A; 解得,x =

POJ1584 判断多边形是否为凸多边形,并判断点到直线的距离

求点到直线的距离: double dis(point p1,point p2){   if(fabs(p1.x-p2.x)<exp)//相等的  {    return fabs(p2.x-pegx);    }  else     {   double k=(p2.y-p1.y)/(p2.x-p1.x);   double b=p2.y-k*p2.x;   return fabs(k*pegx-pegy+b)/sqrt(k*k+1);//返回的是距离的   }}判断多边形是否为凸多边形 if

已知直线上的两点 A(x1, y1), B(x2, y2) 和另外一点 C(x0, y0),求C点到直线的距离。

数学知识太差,一点点积累,高手勿喷. 1. 先求出AB向量 a = ( x2-x1, y2-y1 ) 2. 求AB向量的单位方向向量 b = √((x2-x1)^2 + (y2-y1)^2)) a1 = ( (x2-x1)/b, (y2-y1)/b ) 3.求出CA的法向向量(或CB的法向向量) c = ( y0-y1, -(x0-x1) ) 4. 距离 = AC法向向量与BC向量的单位方向向量的数量积 距离d = a1 * c = ( (x2-x1)(y0-y1) - (y2-y1)(x0-x

UVa 11168 (凸包+点到直线距离) Airport

题意: 平面上有n个点,求一条直线使得所有点都在直线的同一侧.并求这些点到直线的距离之和的最小值. 分析: 只要直线不穿过凸包,就满足第一个条件.要使距离和最小,那直线一定在凸包的边上.所以求出凸包以后,枚举每个边求出所有点到直线的距离之和得到最小值. 点到直线距离公式为: 因为点都在直线同一侧,所以我们可以把加法“挪”到里面去,最后再求绝对值,所以可以预处理所有点的横坐标之和与纵坐标之和.当然常数C也要记得乘上n倍. 已知两点坐标求过该点直线的方程,这很好求不再赘述,考虑到直线没有斜率的情况,

使用向量的方法计算点到直线的距离

使用向量的方法效率更高,更简单. 首先要了解什么是向量,什么是向量的模 主要用到了解析几何里的几个公式 a * b = | a | * | b | * cos(x),其中x为向量a,b的夹角 | a | * 单位向量 = a,单位向量为模为1的向量 向量的加减法 ,如下图所示 向量的加法 向量的减法 问题的原型如下图所示,红色的点为鼠标位置,蓝色的点(x0,y0),(x1,y1)为线段的端点,求红色的点到直线的距离 可以将点到线的距离转换为直角三角形的问题,如下图所示: 我们定义鼠标所在点为M,

编程求取直线一般式表达式,两直线交点

背景介绍 ??最近在水面无人艇(USV)模拟仿真中,用到了一些点和线的关系求解,本文主要讲述一下两点确认直线,点到直线距离,两条直线的交点等问题的解决方法,并给出python程序.部分内容非原创,文中给出链接,需要者可以参考. 两点确定直线 表达式定义 ??空间直线的表达式有多种,比如一般式Ax+By+C=0.点斜式y-y0=k(x-x0).截距式x/a+y/b=1.两点式:(y-y1)/(y1-y2)=(x-x1)/(x1-x2)等,它们具有彼此的约束条件,如下所示. ??由上可以看出来,一般

点至直线的距离和垂足点计算

//点到直线的垂足点 public static Coordinate getFootPoint(Coordinate point, Coordinate pnt1, Coordinate pnt2) { double A=pnt2.y-pnt1.y; //y2-y1 double B=pnt1.x-pnt2.x; //x1-x2; double C=pnt2.x*pnt1.y-pnt1.x*pnt2.y; //x2*y1-x1*y2 if (A * A + B * B < 1e-13) { r

POJ 1584 A Round Peg in a Ground Hole(凸多边形判断 + 点是否在多边形内 + 点到线段的最短距离)

题目:传送门 题意:给你一个圆和一个多边形, 判断多边形是不是凸多边形,如果是,接着判断圆是否在凸多边形内部. #include <iostream> #include <stdio.h> #include <string.h> #include <algorithm> #include <queue> #include <map> #include <vector> #include <set> #inclu