ただのメモ

他の人に見せても良い方のメモ

多角形を描く

数学をして、それを医学者に伝えるとき、医学者にもわかる形で伝えなければならない。

そんなとき、1)平易な言葉で説明する。2)図を用いて説明する。などがある。

今回は、図を描く練習として、多角形を描いてみる。

 

はじめましょうか。

 

"""
#二次元の不等式で表す
n = int(input()) #不等式の数
inequality = 
for i in range(n):
  a,b,c = map(int,input().split()) #ax+by<=cの形
  inequality.append([a,b,c])
"""

inequality=[[10,0,10], [0,10,10],[-10,0,0], [0,-10,0]]
n = 4
import random
x = 
y = []
for i in range(10000000):
  num_1 = random.uniform(-25,25)
  num_2 = random.uniform(-25,25)
  flag = 0
  for j in range(n):
    if inequality[j][0] * num_1 + inequality[j][1] * num_2 > inequality[j][2]:
      flag = 1
      break
  if flag == 1:
    continue
  else:
    x.append(num_1)
    y.append(num_2)

  
% matplotlib inline
import matplotlib.pyplot as plt

plt.plot(x,y) #点同士を敢えて繋いで図示すると、埋め尽くされやすい

 

f:id:medical-science:20210831222033p:plain

乱数で、色んな座標の点を用意して、不等式を全て満たす点の集合を用意して、プロットする。

(x,y)を線でつないだほうが、点をプロットするだけ、よりも埋め尽くされやすいので、その作戦を採用した。

ちなみに、凸多角形ならば、この線で繋ぐ作戦は通用するが、凹多角形なら、それは出来ない(へこんでいる部分も、塗りつぶすことになるから)

今回の連立不等式から多角形を図示する場合は、凸多角形なのでセーフ。

 

他にも、(1億回Forループを回した)

inequality=[[10,3,8], [2,9,8],[-10,0,1], [0,-11,4], [9, 9, 9]]
n = 5

f:id:medical-science:20210831223248p:plain

 

inequality=[[10,3,8], [2,9,8],[-10,2,1], [-3,-11,4], [9, 4.9, 9]]
n = 5

f:id:medical-science:20210901022025p:plain


もっと点を増やせば、端の方も綺麗になるだろう。(計算時間が増える、、)

8億回まわすとこのように端も直線に。(頂点の部分もきれいにしたいけど、、)

f:id:medical-science:20210901100640p:plain

 

バイバイ!