已知一线段AB的两端点坐标,以及线段外一点P,写一个函数,求P到线段AB投影的距离:
public static double getDistance(List<double[]> ab, double[] p);
/**
*其中ab中包含两个端点的坐标(xa,ya), (xb,yb),p(xp,yp)为线段外任意一点的坐标。
*/

解决方案 »

  1.   

    定义三个对象就解决问题了
    这样的题目
    public Class A
    {
      private double xa;
      private double ya,
       
      //set ,get Method
    }同理定义 B, P对象
    再另外定义一Class来计算值就可以了只给思路,自己写
      

  2.   

    用海伦公式先计算出三角形的面积,
    再把ab的长度计算出来
    ab上的高就是所求的距离
    程序就不写了吧
      

  3.   

    1 ax+by+c=0
    p(x1,y1)2 代入公式 |a*x1+b*y1+c|/sqrt(b*b+a*a) 注(当a=0或b=0时亦成立)3 求出ax+by+c=0的一般式
       解二元一次方程组
       ax1+by1+c=0
       ax2+by2+c=0
      

  4.   


    1 用两点间距离公式 sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2))分别求出3边的长
    2 算p=(a+b+c)/2
    3 s=sqrt(p*(p-a)*(p-b)*(p-c))
    4 h=s/a;
      

  5.   

    平面内点P(x0,y0)到直线l: Ax+By+C=0的距离为:
      
     打不出来那个了,就不打了两点确定一条直线,直线的方程确定了ABC距离用公式算啊
      

  6.   

    double[] pa = { 1, 2, 3 };
    double[] pb = { 8, 7, 6 };
    double[] pc = { 11, 16, 28 };
    double i = ((pb[1] - pa[1]) * (pc[2] - pa[2])) - ((pb[2] - pa[2]) * (pc[1] - pa[1]));
    double j = ((pb[2] - pa[2]) * (pc[0] - pa[0])) - ((pb[0] - pa[0]) * (pc[2] - pa[2]));
    double k = ((pb[0] - pa[0]) * (pc[1] - pa[1])) - ((pb[1] - pa[1]) * (pc[0] - pa[0]));
    double d = i * i + j * j + k * k;
    double s = Math.sqrt(d) / 2;pa、pb、pc是三维坐标系下三个点的坐标,s是最后的面积
      

  7.   

    二位坐标的话更简单些double[] pa = { 1, 2 };
    double[] pb = { 8, 7 };
    double[] pc = { 11, 16 };
    double s = Math.abs(((pb[0] - pa[0]) * (pc[1] - pa[1]))
    - ((pb[1] - pa[1]) * (pc[0] - pa[0]))) / 2;
      

  8.   

    有一点O,PO垂直AB于O, 距离不就是 向量PA*PO的结果的绝对值吗?
     PO = AO - AP,
     PO * AB = 0,
     
    问题是求出O点,或者说利用一些条件,比如垂直,把PA * PO 转化成 用已知的PA 、PB、 AB 三者来计算。