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