トップ «前の日記 最新 次の日記»

2020-02-26 (We) [長年日記]

_ 点が矢印の中にあるかどうか

三角形の部分は除いて、点が線分の部分の中にあるかどうかを調べたい。

線分の部分の端の点を A, B、点を C とする。

  • 直線 AB と点 C との距離が一定以下
  • 角 CAB が鋭角
  • 角 CBA が鋭角

この3つを満たせば、線分の部分の中にあると思う。

角が鋭角かどうかは、内積が正かどうかで判断できるので、こっちは簡単。

点と直線の距離は、座標から求めようかと思ったんだけど、 三角形 ABC の各辺の長さが判ってるので、三平方の定理でいけるかと。

角 C を挟む辺の長さが a, b で、対する辺の長さが c。 C から垂線を下ろして、垂線の長さを d とすれば、

\[ \sqrt{a^2-d^2} + \sqrt{b^2-d^2} = c \]

かな。二乗して、

\[ a^2 + b^2 - 2d^2 + 2\sqrt{(a^2-d^2)(b^2-d^2)} = c^2 \]

移項して、

\[ 2\sqrt{(a^2-d^2)(b^2-d^2)} = c^2 - a^2 - b^2 + 2d^2 \]

もう一回二乗して

\[ 4(a^2-d^2)(b^2-d^2) = (c^2 - a^2 - b^2 + 2d^2)^2 \]

左辺右辺それぞれ整理して、

\[ 4a^2b^2-4a^2d^2-4b^2d^2+4d^4 = (c^2-a^2-b^2)^2 + 4(c^2-a^2-b^2)d^2 + 4d^4 \]

$d$ を左辺へ、他を右辺へ。

\[ -4a^2d^2-4b^2d^2 - 4(c^2-a^2-b^2)d^2 = (c^2-a^2-b^2)^2 - 4a^2b^2 \\ -4(a^2+b^2)d^2 - 4(c^2-a^2-b^2)d^2 = (c^2-a^2-b^2)^2 - 4a^2b^2 \\ -4c^2d^2 = (c^2-a^2-b^2)^2 - 4a^2b^2 \\ d^2 = \frac{(c^2-a^2-b^2)^2 - 4a^2b^2}{-4c^2} \]

$d\ge 0$ だから、

\[ d = \sqrt{\frac{(c^2-a^2-b^2)^2 - 4a^2b^2}{-4c^2}} \]

符号が気持ち悪いので、

\[ d = \sqrt{\frac{4a^2b^2 - (c^2-a^2-b^2)^2}{4c^2}} \]

検算。

$a=5$, $b=3\sqrt{2}$, $c=7$ の場合。

$a^2=25$, $b^2=18$, $c^2=49$ なので、

\[ \begin{align} d &= \sqrt{\frac{4a^2b^2 - (c^2-a^2-b^2)^2}{4c^2}} \\ &= \sqrt{\frac{4\times 25\times 18 - (49-25-18)^2}{4\times 49}} \\ &= \sqrt{\frac{1800 - 36}{196}} \\ &= 3 \end{align} \]

正解!

A, B, C の座標が既知だから、そこから $a$,$b$,$c$ を求めて使おうと思ってたけど、 $a^2$,$b^2$,$c^2$ しか使わないなら、そこで平方根を使わなくて済む。 平方根は $d$ を求める一番最後のステップだけか。計算速そうだな。

明日はこれを実装しよう。


編集 パスワード変更