function CalVerDistance(XA, YA, XB, YB, XP, YP: Double): Double;{----------------------------------------------------------------------------- 参数 : (XA, YA)、 (XB, YB)是直线上的两点, (XP, YP)是直线外的一点 返回值: 点到直线的距离 -----------------------------------------------------------------------------} var dx, dy, dAB, myshadow: double; begin dx := XB - XA;//取得AB矢量 dy := YB - YA; dAB := sqrt(dx * dx + dy * dy);//取AB矢量的长度 dx := dx / dAB;//AB矢的单位化 dy := dy / dAB; myshadow := (XP - XA) * dx + (YP - YA) * dy;//取投影 Result := sqrt((XP - XA) * (XP - XA) + (YP - YA) * (YP - YA) - myshadow * myshadow) end;
////////////////////////////////////////////////////////////////////////// //功能:点到直线的距离 //使用直线方程: y=kx+b //点到直线的方程:d=|kx0-y0+b|/sqrt(k*k+1) //当直线平行于x轴时,点到直线的距离d=|y-y1| //当直线垂直于x轴时,点到直线的距离d=|x-x1| //参数: point为点的坐标 // point1和point2为直线上的两点,由这两点确定直线方程 //返回值: 点到直线的距离 ////////////////////////////////////////////////////////////////////////// function funPointToLineSpace(point,point1,point2:TPoint):Real; var k :Real; //直线的斜率 b :Real; //直线方程中的b d :Real; //点到直线的距离 begin d:=0; if (point1.X <> point2.X) then begin //确定直线的两点坐标point1和point2的x坐标不相等,即直线不是垂直于x轴 k:=(point2.Y-point1.Y)/(point2.X-point1.X); //求出直线的斜率 if k=0 then begin //斜率等于0,直线为平行直线 d:=abs(point.Y-point2.Y); //求出点到直线的距离d end else begin //斜率不为0,直线即不平行于x轴也不垂直于x轴 b:=point2.Y-k*point2.X; //求出直线方程中的b d:=abs(k*point.X-point.Y+b)/sqrt(k*k+1); //求出点到直线的距离d end; //if k=0 then end else begin //直线垂直于x轴 d:=abs(point.X-point1.X); //求出点到直线的距离d end; //if (point1.X <> point2.X) then funPointToLineSpace:=d; //返回点到直线的距离 end;
要是图形可以无级缩放,x,y轴坐标系不变。那可不确定了
参数 : (XA, YA)、 (XB, YB)是直线上的两点,
(XP, YP)是直线外的一点
返回值: 点到直线的距离
-----------------------------------------------------------------------------}
var
dx, dy, dAB, myshadow: double;
begin
dx := XB - XA;//取得AB矢量
dy := YB - YA;
dAB := sqrt(dx * dx + dy * dy);//取AB矢量的长度
dx := dx / dAB;//AB矢的单位化
dy := dy / dAB;
myshadow := (XP - XA) * dx + (YP - YA) * dy;//取投影
Result := sqrt((XP - XA) * (XP - XA) + (YP - YA) * (YP - YA) - myshadow *
myshadow)
end;
//功能:点到直线的距离
//使用直线方程: y=kx+b
//点到直线的方程:d=|kx0-y0+b|/sqrt(k*k+1)
//当直线平行于x轴时,点到直线的距离d=|y-y1|
//当直线垂直于x轴时,点到直线的距离d=|x-x1|
//参数: point为点的坐标
// point1和point2为直线上的两点,由这两点确定直线方程
//返回值: 点到直线的距离
//////////////////////////////////////////////////////////////////////////
function funPointToLineSpace(point,point1,point2:TPoint):Real;
var
k :Real; //直线的斜率
b :Real; //直线方程中的b
d :Real; //点到直线的距离
begin
d:=0;
if (point1.X <> point2.X) then
begin
//确定直线的两点坐标point1和point2的x坐标不相等,即直线不是垂直于x轴
k:=(point2.Y-point1.Y)/(point2.X-point1.X); //求出直线的斜率
if k=0 then
begin
//斜率等于0,直线为平行直线
d:=abs(point.Y-point2.Y); //求出点到直线的距离d
end
else
begin
//斜率不为0,直线即不平行于x轴也不垂直于x轴
b:=point2.Y-k*point2.X; //求出直线方程中的b
d:=abs(k*point.X-point.Y+b)/sqrt(k*k+1); //求出点到直线的距离d
end; //if k=0 then
end
else
begin
//直线垂直于x轴
d:=abs(point.X-point1.X); //求出点到直线的距离d
end; //if (point1.X <> point2.X) then
funPointToLineSpace:=d; //返回点到直线的距离
end;