2点を通る直線の方程式を求める関数を作ってみました。
直線の方程式オブジェクトには、
y軸に平行な場合yに値が格納され、
x軸に平行な場合xに値が格納され、
それ以外の場合はy=mx+nの形式でmとnの値が格納されたオブジェクトが返却されます。
※ax+by+c=0と使い分けるためにy=mx+nを使用しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
# 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)を通る直線
1 2 3 4 5 6 |
# -*- 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)) |
1 2 3 4 |
(2, 4)と(2, 7)を通る直線の場合 { "x": 2 } |

y軸に平行な場合(2, 4)と(3, 4)を通る直線
1 2 3 4 5 6 |
# -*- 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)) |
1 2 3 4 |
(2, 4)と(3, 4)を通る直線の場合 { "y": 4 } |

y軸にもx軸にも平行ではない場合(2, 4)と(3, 7)を通る直線
1 2 3 4 5 6 |
# -*- 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)) |
1 2 3 4 5 |
(2, 4)と(3, 7)を通る直線の場合 { "m": 3.0, "n": -2.0 } |
