2点を通る直線の方程式
code: Calc_line.py
def Calc_line(p1, p2):
a = p21 - p11
b = p10 - p20
c = p11 * p20 - p10 * p21
return (a, b, c)
$ ax+by+c=0
$ (a,b,c)を$ k倍$ (k \neq 0)した方程式は同じものなので、gcdで割ったあと$ a>0または$ a=0 \land b > 0を満たすように正規化する。
code: Calc_line.py
from math import gcd
def Calc_line(p1, p2):
a = p21 - p11
b = p10 - p20
c = p11 * p20 - p10 * p21
g = gcd(a, b)
g = gcd(g, c)
a, b, c = a//g, b//g, c//g
if a > 0:
return (a, b, c)
elif a < 0:
return (-a, -b, -c)
else:
if b > 0:
return (a, b, c)
else:
return (a, -b, -c)
#幾何