LoginSignup
0
0

More than 1 year has passed since last update.

pythonを便利に使おう第六回!線図編!

Last updated at Posted at 2021-07-18

初めに

 どこかの入試問題だったか定期テスト問題だったかで、面白い線図の問題が出たことをたった今になって思い出したところ、その線図の最終的な答えが確か、ドラえもんになったのを覚えています。今回はとりあえずmatploblibで簡単な線図が出来るようになるのを目指します。

線図

 線図の重要性は、そのほとんどの概念が現実世界と鏡写しに出来ることから、簡単に理解できます。例えば、機械の設計では細かく素材の長さを設定し、その図形によって、「この角度であれば、この材質のものではこれほど耐えることが出来る」などを導き出すことができます。線図とはやはり手書きで、人の手で思考のままに手掛けるべきなのでしょうが、便利になるならばそれに越したことはありません。

第一問 円の線図

 円の関数は以下のとおりですね。

r=x^2+y^2

 半径を1と仮定し、xの配列からyを求めて、それをmatplotlibで表示できるか試みます。

import numpy as np
import matplotlib.pyplot as plt
xs = np.arange(-100,100)*0.01
ys = np.sqrt(1-xs**2)
plt.scatter(xs,ys)
plt.show()

Figure_1.png
 平方根は正の値しか出す気がないようです。ならば、マイナスをかければいい話。

import numpy as np
import matplotlib.pyplot as plt
xs = np.arange(-100,100)*0.01
ys = np.sqrt(1-xs**2)
plt.scatter(xs,ys)
plt.scatter(xs,-ys)
plt.show()

Figure_1.png

 んー、綺麗には見えませんね。
 それに色も違いますし。そこら辺も考慮して再編集。

import numpy as np
import matplotlib.pyplot as plt
xs = np.arange(-100,100)*0.01
ys = np.sqrt(1-xs**2)
x=np.append(xs,xs)
y=np.append(ys,-ys)
plt.plot(x,y)
plt.show()

Figure_1.png
 なんだか面白い形になりましたねw
 「e」と見えなくもない。これはつまり、xとyの順番が間違っているのでしょう。それを修正します。

import numpy as np
import matplotlib.pyplot as plt
xs = np.arange(-100,100)*0.01
ys = np.sqrt(1-xs**2)
x=np.append(xs,xs[::-1])
y=np.append(ys,-ys[::-1])
plt.plot(x,y)
plt.show()

Figure_1.png
 ずいぶんと円に近いかたちになりましたね。これを完璧に近づけるには、もうすこしxsの値を細かくわけなくてはいけませんね。

import numpy as np
import matplotlib.pyplot as plt
xs = np.arange(-100,100,0.0001)
ys = np.sqrt(1-xs**2)
x=np.append(xs,xs[::-1])
y=np.append(ys,-ys[::-1])
plt.plot(x,y)
plt.show()

Figure_1.png
 深く求めすぎるのも行けないので、この円はこの程度で済ませておきましょう。テスト1週間前に息抜きでpythonを触っていることもあって、あまり時間は取れておらず、実験も出来なくて悲しい限りです。

第二問 線の線図

 順番を間違えている気がしなくもありませんが、次に線を書いてみましょう。

import numpy as np
import matplotlib.pyplot as plt
xs = np.arange(-100,100,0.01)
ys = np.ones(20000)
plt.plot(xs,ys)
plt.show()

Figure_1.png
 うーん簡単ですね。

第三問 四角形の線図

 思ったよりも面倒くさそうですね。

import numpy as np
import matplotlib.pyplot as plt
xs = np.arange(-100,100,0.01)
ys = np.ones(20000)
x=np.append(xs,xs)
y=np.append(ys,-ys)
plt.plot(x,y)
plt.show()

Figure_1.png
 今度はZかーw
 このままだったら、図形よりもアルファベットを先に揃えれてしまいそうですね。

import numpy as np
import matplotlib.pyplot as plt
xs = np.arange(-100,100,0.01)
ys = np.ones(20000)
x=np.append(xs,xs[::-1])
y=np.append(ys,-ys[::-1])
plt.plot(x,y)
plt.show()

Figure_1.png
コ、とかいて、口を閉じていませんね。これはたった一つ点を追加することで解決できそうですが…ちょいまて、これはもう少し楽にできそうだ。

import numpy as np
import matplotlib.pyplot as plt
xs = np.array([1,2,2,1,1])
ys = np.array([1,1,2,2,1])
plt.plot(xs,ys)
plt.show()

Figure_1.png

最後に

 もう少し楽な方法がないのだろうかと、調べてみれば、案の定、今回表示するために努力した丸とか四角とかを表示するためのメソッドが予め存在していました。線の線図は確認していませんがきっとあるのでしょう。
 次回の第七回ではこれらを利用してドラえもんでも書いてみようと思います。以上です。

0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0