7
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

直線の方程式

Last updated at Posted at 2020-03-13

基本形

傾きが $m$ で、点$(0,n)$ を通る直線の方程式は、
$$\bf y=mx+n$$
で表される。( $y$ 切片が $n$ )
$m=0$ のとき、$y=n$ となり、これは$x$軸に平行な直線を表す。
$y$ 軸に平行な直線($x=p$ の形の直線)はこの形では表現できない。

一般形

直線の方程式 $y=mx+n$ の右辺を左辺に移項してして整理すれば、
$mx-y+n=0$ となり、これは $x,y$ に関する一般的な形の1次方程式
$$\bf ax+by+c=0 \ (a\neq 0 \ または \ b\neq0)$$
の形をしている。これが直線の方程式の一般形。

この形ならば、$y$軸に平行な直線も表現できる。
この形の欠点は、1つの直線の表現が一意に定まらない、つまり、
$3x-2y-4=0$ と $x-\frac{2}{3}y-\frac{4}{3}=0$ は同じ直線を表す。

この方程式は$x$と$y$ に関する1次方程式であるので、$x$と$y$ の係数 $a$と$b$ が同時に $0$ になることはない。
すなわち、$a=0,b=0$ となることはない。

$a\neq0,b\neq0$ のとき、$ax+by+c=0$ は、
$$y=-\frac{a}{b}x-\frac{c}{b}$$
と書き換えられるので、これは傾きが $-\dfrac{a}{b}$、$y$ 切片が$-\dfrac{c}{b}$の直線を表す。

$a\neq0,b=0$ のとき、$ax+by+c=0$ は、
$$x=-\frac{c}{a}$$
となる。これは、$y$ 軸に平行な直線を表す。

$a=0,b\neq0$ のとき、$ax+by+c=0$ は、
$$y=-\frac{c}{b}$$
となる。これは、$x$ 軸に平行な直線を表す。

また、
直線 $ax+by+c=0$ において、係数の組 $(a,b)$ はこの直線の法線ベクトルの1つを表す。
直線のベクトル方程式 参照)

【例】方程式 $3x-2y-4=0$ の表す図形を書く
この式を変形すると、
$$ y=\frac{3}{2}x-2$$
となる。これは傾きが $-\dfrac{3}{2}$、$y$ 切片が$-2$の直線を表す。

1点と傾きが与えられた直線

点$(x_1,y_1)$ を通り、傾きが $m$ の直線は、$y$ 切片を $n$ とすると、直線の方程式の標準形、
$$y=mx+n$$
で表すことができる。この直線が、点$(x_1,y_1)$ を通るので、
$y_1=mx_1+n$ すなわち、$n=y_1-mx_1$
これを元の標準形の式に代入すると、
$y=mx+y_1-mx_1$ となり、$y_1$ を左辺に移項して、右辺を$m$でくくると、
$$\bf y-y_1=m(x-x_1)$$
となる。これが点$(x_1,y_1)$ を通り、傾きが $m$ の直線の方程式です。
直線の方程式_05_1点と傾き.png

2点を通る直線

直線の方程式_06_2点を通る.png
2点 $P_1(x_1,y_1)$、$P_2(x_2,y_2)$ を通る直線は、
$x_1\neq x_2$ のとき、
この直線の傾きは、$\dfrac{y_2-y_1}{x_2-x_1}$ で点 $(x_1,y_1)$ を通るので、
1点と傾きが与えられた直線の式 $y-y_1=m(x-x_1)$ により、
$$\bf y-y_1=\dfrac{y_2-y_1}{x_2-x_1}(x-x_1)$$
となる。これが2点 $(x_1,y_1)$、$(x_2,y_2)$ を通る直線の方程式です。
この式は、$x_1=x_2$ の場合、右辺の分母が $0$ になるので成立しない。
したがって、$y$ 軸に平行な直線を表現できない。

この式を変形して、
(1) 右辺と左辺を入れ替える
$\dfrac{y_2-y_1}{x_2-x_1}(x-x_1)=y-y_1$

(2) 両辺に $(x_2-x_1)$ を掛ける
$(x-x_1)(y_2-y_1)=(x_2-x_1)(y-y_1)$

(3) 展開する
$xy_2-xy_1-x_1y_2+x_1y_1=x_2y-x_2y_1-x_1y+x_1y_1$

(4) 両辺に $x_1y_1$ があるので消す。左辺を$x$、右辺を$y$でくくる
$(y_2-y_1)x-x_1y_2=(x_2-x_1)y-x_2y_1$

この式の右辺を左辺に移項すると、
$$\bf (y_2-y_1)x-(x_2-x_1)y-(x_1y_2-x_2y_1)=0$$
となる。これも2点 $(x_1,y_1)$、$(x_2,y_2)$ を通る直線の方程式です。
さらに符号を$+$に変えて、
$$\bf (y_2-y_1)x+(x_1-x_2)y+(x_2y_1-x_1y_2)=0$$
この式は、直線の方程式の一般形 $ax+by+c=0$ の形をしている。

2点から直線の方程式を求めるプログラム

直線の方程式をプログラムで扱う場合は、正規化すると便利。

;; 2点から直線の方程式を求める ax + by + c = 0
;; 点p1,p2 から 直線の方程式の係数 a , b , c のリストを返す
;; 2点間の距離(len)で割って正規化する
;;     Args - p1, p2 : 点のリスト
(defun line:GetEquation (p1 p2 / x1 y1 x2 y2 l)
    (setq x1 (car p1) y1 (cadr p1)
          x2 (car p2) y2 (cadr p2)
          len (distance p1 p2) ;; p1-p2の距離
    )
    (if (> len 1.0e-08)
        (mapcar
            (function
                (lambda (x) (/ x len))
	    )
	    (list (- y2 y1) (- x1 x2) (- (* x2 y1) (* x1 y2)))
        )
    )
)

;; < Example >
(line:GetEquation '(2 3) '(10 -1))
;; -> (-0.447214 -0.894427 3.57771)
(line:GetEquation '(2 3) '(10 5))
;; -> (0.242536 -0.970143 2.42536)
(line:GetEquation '(6 -2) '(4 2))
;; -> (0.894427 0.447214 -4.47214)
(line:GetEquation '(2 0) '(2 -9))
;; -> (-1.0 0.0 2.0)
7
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?