js 计算在AB两点连线上,距离A点一定距离的点的坐标

    /**
 * @description 获取在AB两点连线上,以AB为方向,距离A点,L处的点的坐标
 * @param A:{x,z} 点A
 * @param B:{x,z} 点B
 * @param L  距A点L处
 * @return D: {Dx,Dz} 点D坐标
 * */
function getLengtnPoint(A,B,L) {
    //求直线斜率
    if(B.x==A.x&&B.x==0) {
        let Dz=A.z+L;
        let Dx=0;
        return {Dx,Dz}
    }
    let k=(B.z-A.z)*1.0/(B.x-A.x);
    let b=B.z-k*B.x;

    // 第二步:求得在直线y=kx+b上,距离当前坐标距离为L的某点
    let H = Math.pow(k, 2) + 1;// A=k^2+1;
    let I = 2 * ((b - A.z) * k - A.x);// B=2[(b-y0)k-x0];
    let J = Math.pow(b - A.z, 2) + Math.pow(A.x, 2)- Math.pow(L, 2);
    let Dx1 = (-I + Math.sqrt(Math.pow(I, 2) - 4 * H * J)) / (2 * H);
    let Dx2 = (-I - Math.sqrt(Math.pow(I, 2) - 4 * H * J)) / (2 * H);
    let Dx = 0;// 最后确定是在已知两点之间的某点
	
	// 在向量AB方向上的D点
    if((B.x-A.x>0&&Dx1-A.x>0)||(B.x-A.x>0&&Dx1-A.x>0)) {
        Dx=Dx1;
    }else {
        Dx=Dx2;
    }
    let Dz=k * Dx + b;
    return {Dx,Dz}
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值