前提・実現したいこと
図形の回転
該当のソースコード
Python
1 2from tkinter import tk,Canvas,Frame 3import math 4 5def rotate( p, p0, deg): 6 p = [p[0],p[1],1] 7 rad = math.radians(deg) 8 A1 = math.array([[ 1, 0,-p0[0]],[ 0, 1,-p0[1]], 9 [ 0 ,0, 1]]) 10 A2 = math.array([[math.cos(rad),-math.sin(rad),0], 11 [ math.sin(rad), math.cos(rad),0], 12 [ 0, 0, 1]]) 13 A3 = math.array([[ 1, 0, p0[0]], 14 [ 0, 1, p0[1]], 15 [ 0, 0, 1]]) 16 17 p = A3.dot(A2).dot(A1).dot(p) 18 return [p[0],p[1]] 19 20window = Tk() 21window.title('サンプル') 22 23frame1 = Frame(window,bd=1,relief="ridge") 24frame1.grid(row=0, column=0,sticky='news') 25 26c = Canvas(frame1, height=500, width=500, bg='white',bd=1,relief="ridge") 27c.pack() 28 29図形データ = [ [469, -323], [469, -299], 30 [469, -299], [270, -299], 31 [270, -299], [270, -323], 32 [270, -323], [469, -323]] 33 34for i in range(0, len(図形データ),2): 35 canvas.create_line(図形データ[i][0], (図形データ[i][1]*-1),図形データ[i+1][0], (図形データ[i+1][1]*-1),fill='black',width=1.0) 36 37 lt = rotate([図形データ[i][0], (図形データ[i][1]*-1)],[300,300],90) 38 rb = rotate([図形データ[i+1][0], (図形データ[i+1][1]*-1)],[300,300],90) 39 canvas.create_line(lt[0],lt[1],rb[0],rb[1],fill='red',width=1.0) 40 41canvas.create_rectangle((300,300,300,300),fill='red') 42 43root.mainloop()
試したこと
numpyモジュールで書いていたものをわかる部分はmathモジュールで再現した
補足情報(FW/ツールのバージョンなど)
Python 3.7.7 Windows10 64bit
回答1件
あなたの回答
tips
プレビュー