1.背景
最近遇到一个问题,可以抽象成如题目描述的问题。
如何求解例如 矩形(EFGH),矩形(IJKL),矩形(MNOP) 到矩形 ABCD的距离呢?
2.分析
最短距离 会出现在 矩形1 的边界上某点 到矩形2边界上某点的连线。
该问题可以进一步简化成对同一平面上的一条线段 到另一条线段的最短距离进行求解。
也就是 分别求解 矩形1 的4条边 到矩形2 的4条边的最短距离,然后再取 最小值即可。
如何求解 一段线段到另一段线段的最短距离呢?假设 线段1为 AB,线段2 为CD;
情况1: 线段1 和线段2 相交,最短距离为0;
情况2: 线段1 和线段2 不想交;此时 最短距离 会出现在点A到CD的最短距离 或 点B到CD的最短距离 或 点C到AB的最短距离 或 点D到AB的最短距离。
Dmin = min(Da-cd,Db-cd,Dc-ab,Dd-ab);
问题也就可以进一步简化成 求解 平面上一个点到一段线段的最短距离;
点到线段的最短距离分为如下3中情况:
情况1:点在直线上,距离为0;(情况1可以合并到情况2中)
情况2:过点做垂线,垂足在线段内,垂足和该点的连线为最短距离;
情况3: 过点做垂线,垂足在线段外,则距离垂足近的线段端点到该点的距离为最短距离。
3. 代码
3.1 计算同一平面上某点A,到线段CD 的距离。
3.2 计算同一平面上线段AB,到线段CD的最短距离。
3.3 计算同一平面上矩形ABCD 到EFGH 的最短距离。