已知一线段AB的两端点坐标,以及线段外一点P,写一个函数,求P到线段AB投影的距离:
public static double getDistance(List<double[]> ab, double[] p);
/**
*其中ab中包含两个端点的坐标(xa,ya), (xb,yb),p(xp,yp)为线段外任意一点的坐标。
*/
public static double getDistance(List<double[]> ab, double[] p);
/**
*其中ab中包含两个端点的坐标(xa,ya), (xb,yb),p(xp,yp)为线段外任意一点的坐标。
*/
这样的题目
public Class A
{
private double xa;
private double ya,
//set ,get Method
}同理定义 B, P对象
再另外定义一Class来计算值就可以了只给思路,自己写
再把ab的长度计算出来
ab上的高就是所求的距离
程序就不写了吧
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
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;
打不出来那个了,就不打了两点确定一条直线,直线的方程确定了ABC距离用公式算啊
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是最后的面积
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;
PO = AO - AP,
PO * AB = 0,
问题是求出O点,或者说利用一些条件,比如垂直,把PA * PO 转化成 用已知的PA 、PB、 AB 三者来计算。