求:点到直接距离,三个坐标A(X,Y),B(X',Y'),C(X'',Y'')求A到BC直接距离
求:点到直接距离,三个坐标A(X,Y),B(X',Y'),C(X'',Y'')求A到BC直接距离,大师详细指点!勿扰!!
[解决办法]
直线方程一般式:
a *x +b*y +c=0;
a* x' +b* y' +c=0;
a* x''+b* y'' +c=0;
点到直线距离公式
d = abs(a *x +b*y +c) / sqrt(a*a +b*b);
[解决办法]
其实这是个数学题啊
三个点的坐标,组成一个三角形,而两点距离,可能通过坐标算出来,推一下。编程的话 这点逻辑还是要有的
[解决办法]
经典解析几何
[解决办法]
#include <stdio.h>
#include <math.h>
typedef struct point
{double x;//x坐标
double y;//y坐标
}*Ppoint;
typedef struct line
{double k;//直线斜率
double intercept;//截距
}*Pline;
double distanceBetweenPointAndLine(Ppoint src_point,Pline line)// 点到直线的距离
{
double distanceResult;
distanceResult=(line->k*src_point->x+line->intercept-src_point->y)/(sqrt(1+line->k*line->k));
if(distanceResult<0)
return 0-distanceResult;
else
return distanceResult;
}
double distanceBetweenA_toBCline(Ppoint A,Ppoint B,Ppoint C)//A 到BC直线的距离函数(调用点线距公式)
{
struct line l;
l.k=(B->y-C->y)/(B->x-C->x);//通过两点求斜率
l.intercept=B->x*(B->y-C->y)/(C->x-B->x)+B->y;//通过两点求截距
return distanceBetweenPointAndLine(A,&l);
}
int main()
{
/*struct point A,B,C;
A.x=0;A.y=0;
B.x=1;B.y=0;
C.x=0;C.y=-1;*/
struct point A,B,C;
A.x=0;A.y=0;
B.x=3;B.y=0;
C.x=0;C.y=-3;
//struct point p(0,0);
//struct point B(1,0);
//struct point C(0,-1);
printf("%f",distanceBetweenA_toBCline(&A,&B,&C));
return 0;
}
[解决办法]
//这个问题也可用向量的叉积做
//
//S = abs( crossMul(vect(p1,p2),vect(p1,p3)))
//d =S/2 / length( vect(p1,p3))
//1)向量,线段长度.
function seglength (x1,y1,x2,y2:double) :double;
begin
seglength := sqrt((x2 - x1)*(x2 - x1) +(y2 - y1)* (y2 - y1));
end;
////////////////////////////////////////////////////
// 用向量的叉积,求点到线段的距离,不考虑线段两个端点重合
//
function distance_pl(x1,y1,x2,y2,x3,y3:double):double;
var dx2,dx3,dy2,dy3,S:double;
begin
dx2 := x2 - x1;dy2 := y2 - y1; //向量p1p2
dx3 := x3 - x1;dy3 := y3 - y1; //向量p1p3
S := abs(dx2 * dy3 - dx3 *dy2) //向量的叉积(crossMul),求向量平行四边形面积,
//是向量三角形面积的2倍。
distance_pl := S / seglength(x2,y2,x3,y3)/2; //三角形面积公式,求高,点到线段的距离。
end;