2次元と3次元の簡単な幾何学#

平面における直線の方程式#

  1. あるベクトル\(\boldsymbol{a}\)に対して平行な直線

  2. あるベクトル\(\boldsymbol{a}\)に対して垂直な直線

という2つの方法がある

ベクトルaに平行な直線#

\(P\)を通って、ベクトル\(\boldsymbol{a} (\neq \boldsymbol{0})\)に平行な直線を\(l\)とすれば、点\(X\)\(l\)上にあることは、ベクトル\(\vec{PX}\)\(\boldsymbol{a}\)に並行であること、すなわち

\[ \vec{PX} = t \boldsymbol{a} \]

となるような実数\(t\)が存在することと同等である。

\(P, X\)の位置ベクトルをそれぞれ\(\boldsymbol{p}, \boldsymbol{x}\)とすれば、\(\vec{PX} = t \boldsymbol{a}\)

\[ \boldsymbol{x} - \boldsymbol{p} = t \boldsymbol{a} \]

あるいは

\[ \boldsymbol{x} = \boldsymbol{p} + 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}\)

\[ (x, y)=(x_0, y_0) + t(a, b) \]

すなわち

\[ x=x_0 + t a, \quad y=y_0+t b \]

と表される。 これはべクトル方程式を座標を用いて書き表したものである。

なお\(\boldsymbol{a}\)\(\mathbf{0}\) ではないから、 \(a, b\) の少なくとも一方は 0 ではない。

Hide 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()
../../_images/402b800b4a27862314447b12bbb006eaaca631a6b11c8df98a1165fc5720f8d6.png

tを消去した直線の方程式#

媒介変数\(t\)を消去した形にすることもできる

\(x = x_0 + t a\)\(b\)を掛けて、\(y=y_0+t b\)\(a\)を掛けて、両者を差し引けば

\[\begin{split} b x - a y = b x_0 + b t a - a y_0 - a t b\\ = b x_0 - a y_0 \end{split}\]

\(\alpha=b, \quad \beta=-a, \gamma=a y_0-b x_0\)として

\[ \alpha x+\beta y+\gamma=0 \]

2点を通る直線#

2点 \(A,B\) (ただし\(A\neq B\))を通る直線のべクトル方程式は

\[ \boldsymbol{x}=\boldsymbol{a}+t(\boldsymbol{b}-\boldsymbol{a}) \]

あるいは

\[ \boldsymbol{x}=(1-t) \boldsymbol{a}+t \boldsymbol{b} \]

で与えられる

\(\boldsymbol{a}=(3, 5), \boldsymbol{b}=(-5, -3)\)を通る直線の方程式を求める。

\[ \boldsymbol{x}=(1-t) \boldsymbol{a}+t \boldsymbol{b} \]

より

\[\begin{split} \boldsymbol{x}= (1-t) \begin{pmatrix} 3 \\ 5 \end{pmatrix} + t \begin{pmatrix} -5 \\ -3 \end{pmatrix} \end{split}\]
# 与えられた点
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} \cdot(\boldsymbol{x}-\boldsymbol{p})=0 \quad \text{ または } \quad \boldsymbol{a} \cdot \boldsymbol{x}=\boldsymbol{a} \cdot \boldsymbol{p} \]

\(\boldsymbol{a}=(a, b), \boldsymbol{p}=\left(x_0, y_0\right), \quad \boldsymbol{x}=(x, y)\) とおけば、

\[ a\left(x-x_0\right)+b\left(y-y_0\right)=0 \quad \text{ または } \quad a x+b y=a x_0+b y_0 \]

と書かれる。\(a x_0+b y_0\)は定数なので\(c\)とおけば

\[ ax + by = c \]

となる。

\(\boldsymbol{a}=(a, b)\)のような直線に垂直なベクトルは 法ベクトル という。

空間における直線の方程式#

任意の点\(A\)の位置ベクトルがベクトル\(\boldsymbol{a}=\overrightarrow{O A}\)として定義される(\(O\)は原点の座標)

\(P\) を 1 つの点とし, \(\boldsymbol{a}\)\(\mathbf{0}\) でない 1 つのべクトルとする。 \(P\) を通って \(\boldsymbol{a}\) に平行な直線 \(l\) のベクトル方程式は、 前と同様に

\[ \boldsymbol{x}=\boldsymbol{p}+t \boldsymbol{a} \]

によって与えられる。\(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}\)

\[ x=x_0+t a, \quad y=y_0+t b, \quad z=z_0+t c \]

と書くことができる

tの消去#

\(a,b,c\)のいずれも0でなければ

\[ \frac{x-x_0}{a}=\frac{y-y_0}{b}=\frac{z-z_0}{c} \]

として\(t\)を消去できる。

そうでない場合、たとえば\(a=0, b\neq0, c\neq 0\)の場合は

\[ x=x_0, \quad \frac{y-y_0}{b}=\frac{z-z_0}{c} \]

とすればよい

空間における平面の方程式#

ベクトルaに垂直な平面#

所与の点\(P\)\(\boldsymbol{0}\)でないベクトル\(\boldsymbol{a}\)について、\(P\)をとおって\(\boldsymbol{a}\)に垂直な1つの平面\(\alpha\)が定められる

空間の点\(X\)がその平面上にあるためには、ベクトル\(\overrightarrow{P X}=\boldsymbol{x}-\boldsymbol{p}\)\(\boldsymbol{a}\)垂直であることが必要かつ十分であるから、 平面\(\alpha\)の方程式は

\[ \boldsymbol{a} \cdot(\boldsymbol{x}-\boldsymbol{p})=0 \quad \text{ または } \quad \boldsymbol{a} \cdot \boldsymbol{x}=\boldsymbol{a} \cdot \boldsymbol{p} \]

となる。

\(\boldsymbol{a}=(a, b, c), \boldsymbol{p}=\left(x_0, y_0, z_0\right), \boldsymbol{x}=(x, y, z)\) とおけば

\[ a\left(x-x_0\right)+b\left(y-y_0\right)+c\left(z-z_0\right)=0 \]

となり、定数\(a x_0+b y_0+c z_0\)\(d\) とおけば

\[ a x+b y+c z=d \]

\((-3,1,2)\) を通り、 ベクトル \((2,4,-5)\) に垂直な平面の方程式を求めたいとする。

\[ a x+b y+c z = a x_0+b y_0+c z_0 \]

なので

\[ 2 x + 4 y - 5z = -6 + 4 - 10 \]

よって

\[ 2 x + 4 y - 5z = -12 \]

垂直なベクトルをどう求めるか#

法線ベクトルを求める

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}\)を用いて

\[ \overrightarrow{\mathrm{OX}}=\overrightarrow{\mathrm{OP}}+s \overrightarrow{\mathrm{PP}^{\prime}}+t \overrightarrow{\mathrm{PP}^{\prime \prime}} \]

と書くことができる(平面のパラメータ表示)

\(P\)を通り\(\boldsymbol{a}, \boldsymbol{b} \in \mathbb{R}^3\)の2方向に張られた平面\(\Pi\)

\[ \Pi = \{\overrightarrow{\mathrm{OP}}+s \boldsymbol{a}+t \boldsymbol{b} \mid s, t \in \mathbb{R}\}=\overrightarrow{\mathrm{OP}}+\mathbb{R} \boldsymbol{a}+\mathbb{R} \boldsymbol{b} \]

が考えられる。\(\Pi\)

\[ \overrightarrow{\mathrm{OX}}=\overrightarrow{\mathrm{OP}}+s \boldsymbol{a}+t \boldsymbol{b} \quad (s, t \in \mathbb{R}) \]

と書ける点\(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 0x7fd190de4dc0>
../../_images/eb8d34a1ecb04a8f287d1e496be6d89c2f8d3e7df2814839534ff45a3ee7497a.png
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 0x7fd190c41420>
../../_images/eb8d34a1ecb04a8f287d1e496be6d89c2f8d3e7df2814839534ff45a3ee7497a.png
\[\begin{split} \boldsymbol{a} = (a_1,a_2,a_3)^T\\ \boldsymbol{b} = (b_1,b_2,b_3)^T\\ \end{split}\]

とすると

\[\begin{split} \overrightarrow{\mathrm{OX}}=\overrightarrow{\mathrm{OP}}+s \boldsymbol{a}+t \boldsymbol{b} \Longleftrightarrow \left\{\begin{array}{l} x_1-p_1=s a_1+t b_1 \\ x_2-p_2=s a_2+t b_2 \\ x_3-p_3=s a_3+t b_3 \end{array}\right. \end{split}\]

となるので、この連立1次方程式を解く。

第1,2式を行列表記すると

\[\begin{split} \left[\begin{array}{ll} a_1 & b_1 \\ a_2 & b_2 \end{array}\right] \left[\begin{array}{l} s \\ t \end{array}\right] = \left[\begin{array}{l} x_1-p_1 \\ x_2-p_2 \end{array}\right] \end{split}\]

なので

\[\begin{split} \left[\begin{array}{l} s \\ t \end{array}\right]=\left[\begin{array}{ll} a_1 & b_1 \\ a_2 & b_2 \end{array}\right]^{-1}\left[\begin{array}{l} x_1-p_1 \\ x_2-p_2 \end{array}\right] \end{split}\]

となるので、第\(2,3\)式に代入すれば、\(\Delta_{12}:=a_1 b_2-a_2 b_1 \neq 0\) の下に

\[\begin{split} \begin{aligned} & {\left[\begin{array}{c} x_2-p_2 \\ x_3-p_3 \end{array}\right]=\left[\begin{array}{ll} a_2 & b_2 \\ a_3 & b_3 \end{array}\right]\left[\begin{array}{ll} a_1 & b_1 \\ a_2 & b_2 \end{array}\right]^{-1}\left[\begin{array}{l} x_1-p_1 \\ x_2-p_2 \end{array}\right]} \\ & =\frac{1}{\Delta_{12}}\left[\begin{array}{ll} a_2 & b_2 \\ a_3 & b_3 \end{array}\right]\left[\begin{array}{rr} b_2 & -b_1 \\ -a_2 & a_1 \end{array}\right]\left[\begin{array}{l} x_1-p_1 \\ x_2-p_2 \end{array}\right] \\ & =\frac{1}{\Delta_{12}}\left[\begin{array}{cc} 0 & a_1 b_2-a_2 b_1 \\ a_3 b_2-a_2 b_3 & a_1 b_3-a_3 b_1 \end{array}\right]\left[\begin{array}{l} x_1-p_1 \\ x_2-p_2 \end{array}\right] \end{aligned} \end{split}\]

この第2成分は

\[ x_3-p_3=\frac{a_3 b_2-a_2 b_3}{\Delta_{12}}\left(x_1-p_1\right)+\frac{a_1 b_3-a_3 b_1}{\Delta_{12}}\left(x_2-p_2\right) \]

となり、

\[ \Delta_{12} (x_3-p_3) = a_3 b_2-a_2 b_3 (x_1-p_1) + a_1 b_3-a_3 b_1 (x_2-p_2) \]

つまり

\[\begin{split} \left|\begin{array}{ll} a_2 & b_2 \\ a_3 & b_3 \end{array}\right| (x_1-p_1) + \left|\begin{array}{ll} a_3 & b_3 \\ a_1 & b_1 \end{array}\right| (x_2-p_2) -\left|\begin{array}{ll} a_1 & b_1 \\ a_2 & b_2 \end{array}\right| (x_3-p_3) =0 \end{split}\]

なので

\[\begin{split} [\lambda, \mu, \nu]=\left[\left|\begin{array}{ll} a_2 & b_2 \\ a_3 & b_3 \end{array}\right|,\left|\begin{array}{ll} a_3 & b_3 \\ a_1 & b_1 \end{array}\right|,\left|\begin{array}{ll} a_1 & b_1 \\ a_2 & b_2 \end{array}\right|\right] \end{split}\]

をつかって

\[\begin{split} [\lambda, \mu, \nu]\left[\begin{array}{l}x_1-p_1 \\ x_2-p_2 \\ x_3-p_3\end{array}\right]=0 \end{split}\]

と表すことができる

ベクトル積で表す平面の方程式#

\[\begin{split} [\lambda, \mu, \nu]\left[\begin{array}{l}x_1-p_1 \\ x_2-p_2 \\ x_3-p_3\end{array}\right]=0 \end{split}\]

\([\lambda, \mu, \nu]\)はベクトル積(外積)\(\boldsymbol{a} \times \boldsymbol{b}\)であるため、

平面の方程式は、外積と内積を使って

\[ (\boldsymbol{a} \times \boldsymbol{b}) \cdot (\boldsymbol{x}-\boldsymbol{p}) = 0 \]

と書くことができる

(法線ベクトル\(a\)を 外積 \(\boldsymbol{a} \times \boldsymbol{b}\)で求める)

ベクトル積は以下のように(形式的に)書くことができる

\[\begin{split} \boldsymbol{a} \times \boldsymbol{b}=\left|\begin{array}{lll} a_1 & b_1 & \boldsymbol{e}_1 \\ a_2 & b_2 & \boldsymbol{e}_2 \\ a_3 & b_3 & \boldsymbol{e}_3 \end{array}\right|=\left|\begin{array}{lll} \boldsymbol{a} & \boldsymbol{b} & \boldsymbol{e} \end{array}\right| \end{split}\]

そのため、\((\boldsymbol{x}-\boldsymbol{p})\)との内積をとるということは、\(e\)\(x-p\)で置き換えた行列に対する行列式

\[ (\boldsymbol{a} \times \boldsymbol{b}) \cdot (\boldsymbol{x}-\boldsymbol{p}) = \left|\begin{array}{lll} \boldsymbol{a} & \boldsymbol{b} & \boldsymbol{x}-\boldsymbol{p} \end{array}\right| \]

ということになる