2点を通る直線の方程式を求める関数を作ってみました。
直線の方程式オブジェクトには、
y軸に平行な場合yに値が格納され、
x軸に平行な場合xに値が格納され、
それ以外の場合はy=mx+nの形式でmとnの値が格納されたオブジェクトが返却されます。
※ax+by+c=0と使い分けるためにy=mx+nを使用しています。
# 2点を通る方程式を返却
# (y=数値) or (x=数値) or (y=mx+n)
def makeLinearEquation(x1, y1, x2, y2):
line = {}
if y1 == y2:
# y軸に平行な直線
line["y"] = y1
elif x1 == x2:
# x軸に平行な直線
line["x"] = x1
else:
# y = mx + n
line["m"] = (y1 - y2) / (x1 - x2)
line["n"] = y1 - (line["m"] * x1)
return line
実際に動かしてみます。
x軸に平行な場合(2, 4)と(2, 7)を通る直線
# -*- coding: utf-8
import json
# (2, 4)と(2, 7)を通る直線の場合(x軸に平行)
print("(2, 4)と(2, 7)通る直線の場合")
print(json.dumps(makeLinearEquation(2, 4, 2, 7), indent=4))
(2, 4)と(2, 7)を通る直線の場合
{
"x": 2
}
y軸に平行な場合(2, 4)と(3, 4)を通る直線
# -*- coding: utf-8
import json
# (2, 4)と(3, 4)を通る直線の場合(y軸に平行)
print("(2, 4)と(3, 4)通る直線の場合")
print(json.dumps(makeLinearEquation(2, 4, 3, 4), indent=4))
(2, 4)と(3, 4)を通る直線の場合
{
"y": 4
}
y軸にもx軸にも平行ではない場合(2, 4)と(3, 7)を通る直線
# -*- coding: utf-8
import json
# (2, 4)と(3, 7)を通る直線の場合(y=mx+n)
print("(2, 4)と(3, 7)通る直線の場合")
print(json.dumps(makeLinearEquation(2, 4, 3, 7), indent=4))
(2, 4)と(3, 7)を通る直線の場合
{
"m": 3.0,
"n": -2.0
}