Loading [MathJax]/extensions/tex2jax.js

2024年9月2日月曜日

2点間を通る直線の式を連立方程式で解く(Python)

2点間を通る直線の式

Pythonで連立方程式を解くことが出来たら、2点間を結ぶ一次方程式も導き出せるので

Pythonで書いてみます。


2点の位置 (-1, -5) (3, 3)
  1. #! /usr/bin/env python    
  2.     
  3. # -*- coding:utf-8 -*-    
  4.      
  5.   
  6. import numpy as np    
  7. import matplotlib.pyplot as plt    
  8. from sympy import Symbol, solve  
  9.     
  10. # 一次関数のデータを作る関数     
  11. def linear(a, b, ran=np.arange(-10,10)):    
  12.     
  13.     arr = []    
  14.     for x in ran:    
  15.         y = x*a + b    
  16.         arr.append(y)    
  17.     
  18.     # 式から配列データを返します  
  19.     return arr    
  20.     
  21. ax = fig.add_subplot(111)    
  22.      
  23. # これで正方形になります   
  24. ax.set_aspect('equal', adjustable='box')    
  25.     
  26. # 表示する幅    
  27. ax.set_xlim(-1011)    
  28. ax.set_ylim(-1011)    
  29.     
  30. # グラフの刻み    
  31. ax.set_xticks(np.arange(-10105))    
  32. ax.set_yticks(np.arange(-10105))    
  33.      
  34. # 補助線をonにします    
  35. ax.minorticks_on()     
  36.     
  37. # グリッドの主線と補助線    
  38. ax.grid(which="major", color="black", alpha=0.5)    
  39. ax.grid(which="minor", color="gray", linestyle="--", alpha=0.5)    
  40.     
  41. # 数値表示を0に合わせます  
  42. ax.spines['bottom'].set_position("zero")    
  43. ax.spines['left'].set_position("zero")    
  44.   
  45. # xの生成  
  46. x = np.arange(-1010)  
  47.   
  48. # 2点の位置 (-1, -5) (3, 3)  
  49. x1, y1 = (-1, -5)  
  50. x2, y2 = (33)  
  51.   
  52. a = Symbol("a")  
  53. b = Symbol("b")  
  54.   
  55. # 2点を連立方程式に変えます  
  56. s1 = a * x1 + b - y1  
  57. s2 = a * x2 + b - y2  
  58.   
  59. result = solve((s1, s2))  
  60.   
  61. # 得られた解  
  62. print(result)  
  63.   
  64. # yの生成  
  65. y = linear(result[a], result[b], x)  
  66.   
  67. # 得られた一次方程式のプロット  
  68. ax.plot(x, y)  
  69.   
  70. # 点(-1, -5) のプロット  
  71. ax.plot(x1, y1, marker="o")  
  72. ax.annotate("(-1, -1)", xy=(x1, y1), color="red")  
  73. # 点(3, 3) のプロット   
  74. ax.plot(x2, y2, marker="o")  
  75. ax.annotate("(3, 3)", xy=(x2, y2), color="red")  
  76. plt.show()    




このように2点間から一次関数のグラフが描画出来ました。

0 件のコメント:

コメントを投稿

Pythonで地図空間データを扱う⑤

ベースの地図が出来た所で、他のデータを被せてみます。 国土地理院の  500mメッシュ別将来推計人口データ  を使用します。 同じく神奈川県のデータ  500m_mesh_suikei_2018_shape_14.zip をダウンロードします。 ベースの地図データと同じ場所に展開...