当前位置: 首页 > news >正文

如何求解射线与线段最近的点

这是一个带约束的最小二乘问题。

一、为什么这是一个「二乘问题」?

我们要求的是:

射线上的点线段上的点 距离最小

参数化表达

射线

[
\mathbf{R}(t) = \mathbf{O} + t\mathbf{D}
]

线段

[
\mathbf{S}(u) = \mathbf{A} + u\mathbf{V},\quad \mathbf{V}=\mathbf{B}-\mathbf{A}
]

两点差向量

[
\mathbf{w}(t,u)=\mathbf{R}(t)-\mathbf{S}(u)
]

目标

[
\min_{t,u} |\mathbf{w}(t,u)|^2
]

平方距离是二次函数
👉 这就是 least squares(二乘)


二、为什么用平方距离?

因为:

[
|\mathbf{w}|^2 = \mathbf{w}\cdot\mathbf{w}
]

  • 没有根号
  • 极值点不变
  • 可微、好算

三、展开目标函数(核心数学)

[
\mathbf{w}(t,u) = \mathbf{O} + t\mathbf{D} - \mathbf{A} - u\mathbf{V}
]

记:
[
\mathbf{W}_0 = \mathbf{O} - \mathbf{A}
]

则:
[
\mathbf{w} = \mathbf{W}_0 + t\mathbf{D} - u\mathbf{V}
]


目标函数

[
f(t,u) = (\mathbf{W}_0 + t\mathbf{D} - u\mathbf{V})^2
]


四、无约束最小二乘(先算“理想解”)

tu 求偏导并令为 0:

对 t:

[
\frac{\partial f}{\partial t}
= 2(\mathbf{W}_0 + t\mathbf{D} - u\mathbf{V})\cdot\mathbf{D} = 0
]

对 u:

[
\frac{\partial f}{\partial u}
= -2(\mathbf{W}_0 + t\mathbf{D} - u\mathbf{V})\cdot\mathbf{V} = 0
]


得到线性方程组

[
\begin{cases}
(\mathbf{D}\cdot\mathbf{D})t - (\mathbf{D}\cdot\mathbf{V})u
= -\mathbf{D}\cdot\mathbf{W}_0
-(\mathbf{D}\cdot\mathbf{V})t + (\mathbf{V}\cdot\mathbf{V})u
= -\mathbf{V}\cdot\mathbf{W}_0
\end{cases}
]


写成标准形式

记:

符号 含义
(a) ( \mathbf{D}\cdot\mathbf{D} )
(b) ( \mathbf{D}\cdot\mathbf{V} )
(c) ( \mathbf{V}\cdot\mathbf{V} )
(d) ( \mathbf{D}\cdot\mathbf{W}_0 )
(e) ( \mathbf{V}\cdot\mathbf{W}_0 )

方程组变为:

[
\begin{cases}
a t - b u = -d
-b t + c u = -e
\end{cases}
]


解这个 2×2 系统

行列式:

[
\Delta = ac - b^2
]

解为:

[
t = \frac{be - cd}{\Delta}
\quad
u = \frac{ae - bd}{\Delta}
]

👉 这就是你代码里看到的公式


五、这只是「无约束」解,为什么不够?

因为:

  • 射线:
    t < 0 不合法
  • 线段:
    u < 0u > 1 不合法

几何意义:

最短距离点可能落在「射线延长线」或「线段延长线」上
但那不是我们要的


六、带约束最小二乘 = 几何裁剪

约束:

t ≥ 0
0 ≤ u ≤ 1

工程处理(也是你看到的代码)

t = Math.Max(t, 0);
u = Clamp(u, 0, 1);

这是:

  • KKT 条件的几何特例
  • 在 3D 几何中是标准、稳定解法

七、平行情况(Δ ≈ 0)为什么要单独处理?

当:

[
ac - b^2 \approx 0
]

说明:

  • D 和 V 方向几乎共线
  • 方程退化
  • 数值不稳定

几何意义

任意一对点几乎都一样“近”

工程退化策略

固定一个参数,再解另一个:

t = 0;
u = Clamp( e / c, 0, 1 );

不是魔法,也不是拍脑袋。

http://www.jsqmd.com/news/355806/

相关文章:

  • 2026什么品牌的电饭煲好?热门机型选购指南 - 品牌排行榜
  • 第十四课:Redis 在后端到底扮演什么角色?——缓存模型全景图
  • 第十四课 · 实战篇:Redis 缓存系统落地指南(Spring Boot 从 0 到可用)
  • P2004 领地选择
  • 2026电压力锅哪个牌子质量好?真实用户口碑推荐 - 品牌排行榜
  • 2026高性价比茅台镇酱酒推荐:好喝不贵的茅香佳酿 - 速递信息
  • 2026电饭煲什么牌子的好用质量好?实测推荐 - 品牌排行榜
  • 2026电压力锅哪个牌子最好最安全?口碑推荐榜 - 品牌排行榜
  • 第 167 场双周赛 / 第 471 场周赛 - 实践
  • 2026国产算力新周期:DeepSeek实战适配英伟达H200,引领大模型训练效率跃升
  • uni-app——uni-app Tab切换导致页面报错的问题排查与解决
  • 从 RestTemplate 到 OpenFeign,再到 WebClient/RestClient:Spring 调用链的进化与最佳实践
  • uni-app—— uni-app 小程序页面栈超限导致跳转失败的解决方案
  • SW零件绘制之旋转实体
  • OLEDB连接对象介绍(一) - 实践
  • uni-app——uni-app 小程序 Loading 遮罩卡死页面的排查与最佳实践
  • SpeedrunEthereum
  • 2026养生壶最建议买的品牌推荐及选购参考 - 品牌排行榜
  • 游戏大厂 FPS 射击游戏高精度物理同步方案详解(大白话、生动版)
  • nvm安装使用
  • 数据库的介绍、安装、单表
  • MindMap部署
  • ByteDance研究团队推出评估AI模型深度研究能力的全新基准
  • UC Davis携手Google DeepMind:让AI模型学会“看重点“的训练方法
  • DS 大大大大训练
  • 腾讯混元团队:AI智能体如何学会真正的“深谋远虑“?
  • Vue源码解析
  • 2026年北海管道疏通服务评测推荐:专业疏通服务排行榜单深度解析与选择指南 - 品牌推荐
  • 机器学习的商业化变现
  • 移植Google Gemini Nano到RK3588 NPU,实现高效边缘推理