求:点到直接距离,三个坐标A(X,Y),B(X',Y'),C(X'',Y'')求A到BC直接距离,大师详细指点!勿扰!!

解决方案 »

  1.   

    直线方程一般式:
    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);
     
      

  2.   

    #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;}
      

  3.   

    //这个问题也可用向量的叉积做
    //
    //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;