はじめに
$xy$平面における点と直線の距離の公式は有名でありかつ形が綺麗で美しい。そこで、まずは直線状の動点と定点との距離を最小値が点と直線の距離であるという事実を用いた証明をまずは行う。距離計算をコンピュータに行わせることによって点と直線の距離公式が正しいということを感覚的に理解することを目指す。具体的には、ある定点$(x_1,y_1)$と直線$ax+by+c=0$上の動点$(x,y)$の距離の二乗を計算して、その最小値が点と直線の距離の二乗と等しいか以下のようなグラフで調査する。
公式の導入
定点$(x_1,y_1)$と直線$ax+by+c=0$の距離$d$は、以下の式で表すことができる。(証明は、ベクトルの内積を使うと楽であるが今回は割愛する。)
d=\frac{|ax_1+by_1+c|}{\sqrt{a^2+b^2}}
したがって、
d^2=\frac{(ax_1+by_1+c)^2}{a^2+b^2}
解析条件と方法
解析の前提条件
以下の式を解析で使用したいため、$b\ne0$とする。(点と直線公式自体は、$b=0$でも成立する。)
y=-\frac{ax+c}{b}
ここで、定点$(x_1,y_1)$と直線状を動く動点$(x,y)$との距離の二乗は三平方の定理より以下の式で表せる。
f(x)=(x_1-x)^2+(y_1-y)^2=(x_1-x)^2+(y_1+\frac{ax+c}{b})^2
これは、$x$について下に凸な二次関数なので、最小値$min(f(x))$が1つだけ存在する。そこで、以下微分を用いた証明をしよう。(なぜ平方完成ではなく微分を用いて、最小値を議論したいかというと、平方完成では、項の数が膨大になり計算過程が複雑になるからである。)
証明
本記事では、細かい手計算は省略するが、大学受験生や大学生の方は是非とも手を動かして証明して欲しい。
f(x)=(x_1-x)^2+(y_1+\frac{ax+c}{b})^2
を$x$で微分して、以下のような方程式を考える。
f'(x)=-2(x_1-x)+2(y_1+\frac{ax+c}{b})(\frac{a}{b})=0
これを満たす$x$を求めると以下のようになる。
x=\frac{b^2x_1+aby_1-ac}{a^2+b^2}(=x_{min})
したがって、
f(x_{min})=\frac{(ax_1+bx_1+c)^2}{(a^2+b^2)^2}(a^2+b^2)=\frac{(ax_1+bx_1+c)^2}{a^2+b^2}=d^2
このことから、点と直線の距離の公式が示された。(定点と直線の距離は、直線状の動点と定点との距離の最小を意味する。)そこで、上記のことを考慮して以下のようなプログラムを作成した。
プログラム
import numpy as np
import matplotlib.pyplot as plt
import japanize_matplotlib
import math
# 分割数
num=100
#直線のパラメータ(一般式)
a=1
b=2
c=3
#最小値が存在する範囲を選定する
x=np.linspace(-1,1,num)
x_1=1
y_1=2
#直線の式の変形板
y=-(1*x+c)/b
f=(x-x_1)**2+(y-y_1)**2
#xとlの値をプロットする
plt.plot(x,f,label="距離の二乗")
# y=d^2の直線を作成するたの配列
ones=np.ones(num)
#点と直線の距離の公式より、d^2=(ax_1+by_1+c)^2/(a^2+b^2)
d2=(a*x_1+b*y_1+c)**2/(a**2+b**2)
plt.plot(x,d2*ones,label="点と直線の距離の二乗")
plt.xlabel("x")
plt.ylabel("距離の二乗f(x)")
plt.legend()
plt.savefig("点と直線の距離の二乗.png")
plt.show()
これを実行すると以下のようなグラフができる。
このグラフから、定点と直線上の動点の距離の二乗は二次関数で表されて、最小値は定点と直線の距離の二乗と等しくなることが分かる。
まとめ
今回は、高校数学の図形と方程式で学ぶ重要公式である点と直線の距離の公式を視覚的に理解することを試みた。点と直線の距離公式は、その証明から応用まで、様々な問題に応用されている。しかし、二乗距離の最小値から攻める問題は計算量が膨大になるので作られにくい。ゆえに、今回のような考察をしてみるのも新鮮である。
参考文献