2次元と3次元の簡単な幾何学#
平面における直線の方程式#
あるベクトル\(\boldsymbol{a}\)に対して平行な直線
あるベクトル\(\boldsymbol{a}\)に対して垂直な直線
という2つの方法がある
ベクトルaに平行な直線#
点\(P\)を通って、ベクトル\(\boldsymbol{a} (\neq \boldsymbol{0})\)に平行な直線を\(l\)とすれば、点\(X\)が\(l\)上にあることは、ベクトル\(\vec{PX}\)が\(\boldsymbol{a}\)に並行であること、すなわち
となるような実数\(t\)が存在することと同等である。
\(P, X\)の位置ベクトルをそれぞれ\(\boldsymbol{p}, \boldsymbol{x}\)とすれば、\(\vec{PX} = t \boldsymbol{a}\)は
あるいは
と書き直すことができる。\(t\)があらゆる実数値をとれば、\(X\)は\(l\)上のあらゆる位置を取る。
\(\boldsymbol{x} = \boldsymbol{p} + t \boldsymbol{a}\) を、\(t\)を媒介変数とする直線\(l\)の ベクトル方程式 といい、\(\boldsymbol{a}\) を\(l\)の 方向ベクトル という。
通常のように ベクトルを成分表示して \(\boldsymbol{a}=(a, b), \boldsymbol{p}=(x_0, y_0), \boldsymbol{x}=(x, y)\) とすれば \(\boldsymbol{x} = \boldsymbol{p} + t \boldsymbol{a}\) は
すなわち
と表される。 これはべクトル方程式を座標を用いて書き表したものである。
なお\(\boldsymbol{a}\) は \(\mathbf{0}\) ではないから、 \(a, b\) の少なくとも一方は 0 ではない。
Show code cell source
import numpy as np
import matplotlib.pyplot as plt
a = np.array([2, 1])
p = np.array([0, 1])
t = 2
x = p + t * a
fig, ax = plt.subplots(figsize=[4.5, 2.5], dpi=100)
o = [0, 0]
ax.arrow(*o, *a, color="darkorange")
ax.text(*a, "a", color="darkorange")
ax.scatter(*p, color="steelblue")
ax.text(*p, "p ", color="steelblue", ha="right")
ax.scatter(*x, color="steelblue")
ax.text(*x, "x ", color="steelblue", ha="right")
ax.arrow(*p, *(x - p), color="steelblue")
pos = p + (x - p) / 2
ax.text(*pos, r"$x = \vec{p} + t \vec{a}$", color="steelblue", ha="right")
ax.set(title=fr"line with $t={t}$, $a={a}$, $p={p}$")
fig.show()
tを消去した直線の方程式#
媒介変数\(t\)を消去した形にすることもできる
\(x = x_0 + t a\)に\(b\)を掛けて、\(y=y_0+t b\)に\(a\)を掛けて、両者を差し引けば
\(\alpha=b, \quad \beta=-a, \gamma=a y_0-b x_0\)として
2点を通る直線#
2点 \(A,B\) (ただし\(A\neq B\))を通る直線のべクトル方程式は
あるいは
で与えられる
点\(\boldsymbol{a}=(3, 5), \boldsymbol{b}=(-5, -3)\)を通る直線の方程式を求める。
より
# 与えられた点
x1, y1 = 3, 5
x2, y2 = -5, -3
# 傾きmを計算
m = (y2 - y1) / (x2 - x1)
# 傾きを使用して点傾き形式の方程式を求める
# 点 (x1, y1) = (3, 5) を使用
m, y1 - m*x1
(1.0, 2.0)
ベクトルaに垂直な直線#
平面上の点\(P\)を通り、\(\boldsymbol{0}\)でないベクトル\(\boldsymbol{a}\)に垂直な直線\(l\)を考える。
点\(X\)が直線\(l\)上にあるためには、ベクトル\(\overrightarrow{P X}\)が\(\boldsymbol{a}\)垂直であることが必要かつ十分である。
\(\overrightarrow{P X}=\boldsymbol{x}-\boldsymbol{p}\)であるから、このことは
\(\boldsymbol{a}=(a, b), \boldsymbol{p}=\left(x_0, y_0\right), \quad \boldsymbol{x}=(x, y)\) とおけば、
と書かれる。\(a x_0+b y_0\)は定数なので\(c\)とおけば
となる。
\(\boldsymbol{a}=(a, b)\)のような直線に垂直なベクトルは 法ベクトル という。
空間における直線の方程式#
任意の点\(A\)の位置ベクトルがベクトル\(\boldsymbol{a}=\overrightarrow{O A}\)として定義される(\(O\)は原点の座標)
\(P\) を 1 つの点とし, \(\boldsymbol{a}\) を \(\mathbf{0}\) でない 1 つのべクトルとする。 \(P\) を通って \(\boldsymbol{a}\) に平行な直線 \(l\) のベクトル方程式は、 前と同様に
によって与えられる。\(t\)を媒介変数、\(\boldsymbol{a}\)を方向ベクトルという。
ベクトルを成分表示して \(\boldsymbol{a}=(a, b, c), \boldsymbol{p}=\left(x_0, y_0, z_0\right), \boldsymbol{x}=(x, y, z)\) とすれば、\(\boldsymbol{x}=\boldsymbol{p}+t \boldsymbol{a}\)は
と書くことができる
tの消去#
\(a,b,c\)のいずれも0でなければ
として\(t\)を消去できる。
そうでない場合、たとえば\(a=0, b\neq0, c\neq 0\)の場合は
とすればよい
空間における平面の方程式#
ベクトルaに垂直な平面#
所与の点\(P\)と\(\boldsymbol{0}\)でないベクトル\(\boldsymbol{a}\)について、\(P\)をとおって\(\boldsymbol{a}\)に垂直な1つの平面\(\alpha\)が定められる
空間の点\(X\)がその平面上にあるためには、ベクトル\(\overrightarrow{P X}=\boldsymbol{x}-\boldsymbol{p}\)が\(\boldsymbol{a}\)垂直であることが必要かつ十分であるから、 平面\(\alpha\)の方程式は
となる。
\(\boldsymbol{a}=(a, b, c), \boldsymbol{p}=\left(x_0, y_0, z_0\right), \boldsymbol{x}=(x, y, z)\) とおけば
となり、定数\(a x_0+b y_0+c z_0\) を \(d\) とおけば
点 \((-3,1,2)\) を通り、 ベクトル \((2,4,-5)\) に垂直な平面の方程式を求めたいとする。
なので
よって
垂直なベクトルをどう求めるか#
法線ベクトルを求める
3点を通る平面#
空間の平面は空間上の異なる3点で決まる。これらを\(\mathrm{P}(p_1, p_2, p_3), \mathrm{P}^{\prime}\left(p_1^{\prime}, p_2^{\prime}, p_3^{\prime}\right), \mathrm{P}^{\prime \prime}\left(p_1^{\prime \prime}, p_2^{\prime \prime}, p_3^{\prime \prime}\right)\)とすると
平面上の点\(X\left(x_1, x_2, x_3\right)\)はパラメータ\(s, t \in \mathbb{R}\)を用いて
と書くことができる(平面のパラメータ表示)
点\(P\)を通り\(\boldsymbol{a}, \boldsymbol{b} \in \mathbb{R}^3\)の2方向に張られた平面\(\Pi\)
が考えられる。\(\Pi\)は
と書ける点\(X\)の全体である。
import matplotlib.pyplot as plt
import numpy as np
o = np.array([0, 0])
p = np.array([1, 1])
a = np.array([0, 2])
b = np.array([2, 0])
x = p + a + b
fig, ax = plt.subplots()
arrow_cfg = dict(width=0.01, color="black", length_includes_head=True)
ax.arrow(*o, *a, **arrow_cfg)
ax.arrow(*o, *b, **arrow_cfg)
ax.scatter(*x)
<matplotlib.collections.PathCollection at 0x7f053079cca0>
import matplotlib.pyplot as plt
import numpy as np
o = np.array([0, 0])
p = np.array([1, 1])
a = np.array([0, 2])
b = np.array([2, 0])
x = p + a + b
fig, ax = plt.subplots()
arrow_cfg = dict(width=0.01, color="black", length_includes_head=True)
ax.arrow(*o, *a, **arrow_cfg)
ax.arrow(*o, *b, **arrow_cfg)
ax.scatter(*x)
<matplotlib.collections.PathCollection at 0x7f0530675360>
とすると
となるので、この連立1次方程式を解く。
第1,2式を行列表記すると
なので
となるので、第\(2,3\)式に代入すれば、\(\Delta_{12}:=a_1 b_2-a_2 b_1 \neq 0\) の下に
この第2成分は
となり、
つまり
なので
をつかって
と表すことができる
ベクトル積で表す平面の方程式#
の\([\lambda, \mu, \nu]\)はベクトル積(外積)\(\boldsymbol{a} \times \boldsymbol{b}\)であるため、
平面の方程式は、外積と内積を使って
と書くことができる
(法線ベクトル\(a\)を 外積 \(\boldsymbol{a} \times \boldsymbol{b}\)で求める)
ベクトル積は以下のように(形式的に)書くことができる
そのため、\((\boldsymbol{x}-\boldsymbol{p})\)との内積をとるということは、\(e\)を\(x-p\)で置き換えた行列に対する行列式
ということになる