📏

複数直線の近傍点を求める

2022/04/04に公開

その一(愚直に)

\bm cを複数直線の近傍点,\bm u_iを直線上のある点,\bm v_iを直線の方向ベクトルとする.

複数直線の近傍点を求めるには,以下の式を最小化すればよい.

f(\bm c, k_i) = \sum_i ||\bm c - (\bm u_i + k_i \bm v_i)||^2

上式を偏微分して解く.

\begin{align} \frac{df}{d\bm c} = 0 &\Leftrightarrow \bm c = \frac{1}{n} \sum_i^n (\bm u_i + k_i \bm v_i) \\ \frac{df}{dk_i} = 0 &\Leftrightarrow k_i = \frac{\bm c^T \bm v_i - \bm u_i^T \bm v_i}{\bm v_i^T \bm v_i} \end{align}

式(1)に式(2)を代入し,\bm cについて解けば近傍点が求まる.

その二(少しお洒落に)

複数直線の近傍点\bm cと直線の距離d_iは,以下の式で表すことができる.

\begin{align*} d_i &= ||\bm c - \bm u_i||\sin \theta \\ &= ||\bm v \times (\bm c - \bm u_i)|| \end{align*}

複数直線の近傍点は,以下の式で表される.

\bm c = \mathop{\rm arg~min} \sum_i d_i^2

\sum_i d_i^2\bm cの成分ごとに偏微分して解けば,近傍点が求まる.

参考文献

Point cloud to point cloud rigid transformations
Nearest approaches to multiple lines in n-dimensional space

GitHubで編集を提案

Discussion