【Python】 図形(円など)を描画 -冬季五輪観ながら-

ICT

 五輪おしまい。
 冬季五輪はフィギュア・スケート、スノーボードなど高速回転系が目につくが、今回はいつも以上だった。

 フィギュアのダブル、トリプルは何となく分かるが、4回転はもう分からない。
  ※ 4回転 = クアドラプル Quadruple略してクアッド Quad
 動体視力衰えた。

 スノーボードはもっと分からない。
 トゥエルブシックスティとか連続技だとついていけない。
 ビッグエアだとエイティーンハンドレッドとか出てくるが、「5回転」と言ってくれればついていける。
 ひとまず慣れるまで手元に表が必要。

3601回転スリーシックスティ
5401回転半ファイブフォーティ
7202回転セブントゥエンティ
9002回転半ナインハンドレッド
10803回転テンエイティ
12603回転半トゥエルブシックスティ
14404回転フォーティーンフォーティ
16204回転半シックスティーントゥエンティ
18005回転エイティーンハンドレッド
19805回転半ナインティーンエイティ

 ハーフパイプの平野選手の逆転V滑走は、
 1440、1440、1260、1260、1440
だから
 4、4、3.5、3.5、4回転。
 トリプルコーク1440のトリプルが縦3回転で、1440が横4回転という説明だった。
 トリプル、ダブル、ダブル、ダブル、ダブル。
 19回転 + 11回転 = 30回転。
 VTR20回以上観ているから
 600回転以上。
 他の選手、他の競技加えると
 おそらく1000回転以上高速回転を観たことになる。

 目が回るわけだ。

スポンサーリンク

三角形、四角形を描く

 前置きが長くなりすぎた。

 これまでPythonで直線を引いたり、グラフの描画については、少しばかり手を付けているが、未だ円を描いていなかった。
 以前描いた円はドロー・ソフトによるもの。

 ドロー・ソフトを使えば簡単に描けるが、
 Python(Python 3+Jupyter)で描いてみる。

 その前に
 未だ四角形も描いていなかったので、描画。
 三角形、四角形は直線3本、4本。

 画面いっぱいに描画されるので、
 大きめの枠(四角)を適当に作っておいて、その中に描画。

import numpy as np
import matplotlib
import matplotlib.pyplot as plt
plt.plot([-1,6,6,-1,-1],[-1,-1,6,6,-1],"-",color="black")
plt.plot([0,5,4,0],[0,0,4,0],"-",color="red")
plt.plot([4,4],[0,5],"-.",color="blue")
plt.plot([2,2.5],[3,3],":",color="green",lw=2)
plt.plot([3.2,3.5,3.5,3.3,3.2],[3.7,3.5,3.9,4,3.7],"-",color="brown",lw=2)
plt.arrow(x=4,y=4,dx=-0.7,dy=0,head_width=0.2,
length_includes_head=True,color="orange")
plt.show()

 例えば、赤色の三角形は、座標(0,0)、(5,0)、(4,4)、(0,0)の順に線引き。
 備忘録なので橙色の矢印 arrowも加えておいた。

スポンサーリンク

円を描いてみる

 円 x2+y2=r2は、
 y=√(r2-x2)の式に変形するよりも
 x=r cos t、y=r sin tのほうがうまく描ける。
  ※ 媒介変数表示という
    sin2 t + cos2 t = 1

 上の媒介変数 tの範囲は角度で0~2π。
 単位はラジアン rad。π[rad]=180°。
 2π [rad]=360° ・・・ 円一周。

 以下のコードは最初のimport部分省略。

plt.plot([-1,8,8,-1,-1],[-1,-1,8,8,-1],"-",color="black")
t = np.linspace(0,np.pi*2,50)
x = 0.9 * np.cos(t)
y = 0.9 * np.sin(t)
plt.plot(x+2,y+4,"-",color="blue",lw=2)
plt.plot(x+4,y+4,"-",color="black",lw=2)
plt.plot(x+6,y+4,"-",color="red",lw=2)
plt.plot(x+3,y+3,"-",color="yellow",lw=2)
plt.plot(x+5,y+3,"-",color="green",lw=2)
plt.axes().set_aspect('equal')
plt.show()

 plt.axes().set_aspect('equal')
を入れると
 縦横比(XY比)が1:1(正方)になる。入れないと(上図の場合)横長に表示される。

 カーリング女子は銀メダルでした

 線を太くしてみたが、始点・終点に要らない線が現れてしまう。

 斜め楕円の部分は、

t = np.linspace(0,np.pi*2,50)
x = 1.2 * np.sin(t)
y = 1.8 * np.cos(t)
xx = np.cos(np.pi/4) * x - np.sin(np.pi/4) * y + 6
yy = np.sin(np.pi/4) * x + np.cos(np.pi/4) * y + 4
plt.plot(xx,yy,"-",color="black",lw=10)

 x=r cos t、y=r sin tのrが違う場合、つまりx=a cos t、y=b sin tだと楕円。
 回転させると斜め楕円。

 各種図形の描画、色塗りなどは、

  •  matplotlibライブラリのpatchesモジュール
  •  Tkinterライブラリ
  •  Pillowライブラリ
  •  OpenCVライブラリ
  •  
  •  
  •  

を使うと容易、とのこと。

 追)

スポンサーリンク
ふシゼン
タイトルとURLをコピーしました