SOURCE

function calculateShortestDistance(r10, v1, r20, v2) {
    // 初始位置差
    let d0 = [r20[0] - r10[0], r20[1] - r10[1]];
    // 速度差
    let vd = [v2[0] - v1[0], v2[1] - v1[1]];
    
    // 计算速度差与初始位置差的点积
    let dotProduct = d0[0] * vd[0] + d0[1] * vd[1];
    
    if (dotProduct === 0) {
        // 如果速度差与初始位置差垂直,直接计算初始位置差的模
        return Math.sqrt(d0[0] * d0[0] + d0[1] * d0[1]);
    } else {
        // 计算t值
        let t = -dotProduct / (vd[0] * vd[0] + vd[1] * vd[1]);
        // 计算最短距离
        let shortestDistance = Math.sqrt((d0[0] + vd[0] * t) * (d0[0] + vd[0] * t) + (d0[1] + vd[1] * t) * (d0[1] + vd[1] * t));
        return shortestDistance;
    }
}

// 示例使用
let r10 = [0, 0]; // 动点1的初始位置
let v1 = [1, 2];  // 动点1的速度
let r20 = [3, 4]; // 动点2的初始位置
let v2 = [5, 6];  // 动点2的速度

console.log(calculateShortestDistance(r10, v1, r20, v2)); // 输出最短距离
console 命令行工具 X clear

                    
>
console