2直線の交点を求める

HOME>>メモ>>図形処理の基礎>>2直線の交点を求める

陰関数で表わす

2本の直線の交点を求めてみます。 直線の方程式を次のように定義します。

\begin{eqnarray*} a_1 x + b_1 y + c_1 &=& 0 \\ a_2 x + b_2 y + c_2 &=& 0 \end{eqnarray*}

単純な二元の連立方程式なので簡単にとけます。 ここではクラメルの公式を使ってみましょう。

\begin{eqnarray*} x &=& \frac{\left| \begin{array}{cc} -c_1 & b_1 \\ -c_2 & b_2 \end{array} \right|}{\left| \begin{array}{cc} a_1 & b_1 \\ a_2 & b_2 \end{array} \right|} = \frac{b_1c_2-b_2c_1}{a_1b_2-a_2b_1} \\ y &=& \frac{\left| \begin{array}{cc} a_1 & -c_1 \\ a_2 & -c_2 \end{array} \right|}{\left| \begin{array}{cc} a_1 & -c_1 \\ a_2 & -c_2 \end{array} \right|}= \frac{-a_1c_2+a_2c_1}{a_1b_2-a_2b_1} \end{eqnarray*}

媒介変数表示で表わす

媒介変数を使ったパラメトリックな表現でも求めてみます。

\begin{eqnarray*} \overrightarrow{p} &=& = \overrightarrow{v_1}t_1 + \overrightarrow{p_1}\\ \overrightarrow{p} &=& = \overrightarrow{v_2}t_2 + \overrightarrow{p_2} \end{eqnarray*}

陰関数表示の場合と同様に連立方程式をたてて解いてもいいですが、 別の考え方をしてみましょう。

直線1と直線2の交点を求めることを考えます。 ここで、直線2上に点Pを取ってみましょう。 点Pが直線1上の点でもあるということは、点Pと直線1の距離が0であるということです。 点と直線の距離は「点と直線の距離を求める」でやりました。

\begin{eqnarray*} \frac{\overrightarrow{v_1}\times(\overrightarrow{v_2}t_2+\overrightarrow{p_2}-\overrightarrow{p_1})}{|\overrightarrow{v_1}|} &=& 0 \\ (\overrightarrow{v_1}\times\overrightarrow{v_2})t_2+\overrightarrow{v_1}\times(\overrightarrow{p_2}-\overrightarrow{p_1}) &=& 0 \\ t_2 &=& -\frac{\overrightarrow{v_1} \times (\overrightarrow{p_2}-\overrightarrow{p_1})}{\overrightarrow{v_1} \times \overrightarrow{v_2}} \end{eqnarray*}

$t_1$についても同様に考えると

\[ t_2 = -\frac{\overrightarrow{v_2} \times (\overrightarrow{p_2}-\overrightarrow{p_1})}{\overrightarrow{v_1} \times \overrightarrow{v_2}} \]

となります。後はこれを直線の式に代入すれば、交点の座標が求まります。

実際にやってみよう

実際にやってみました。 SVGにJavascriptを埋め込んで簡単なアニメーションを作ってみました。 黒の何本かの直線が与えられた時の交点を求めます。赤の小さい円が交点です。
SVGファイルをダウンロードする

残念ながら現在使用しているブラウザでは表示できません。 IE以外のブラウザの最新版をダウンロードしてください。