以下のようなrotate
関数を作ればできます。
Python
1import tkinter as tk
2import numpy as np
3
4def rotate( p, p0, deg): # 回転する点、回転の原点、回転角度(時計回り)
5 p = [p[0],p[1],1]
6 rad = np.deg2rad(deg)
7 A1 = np.array([[ 1, 0,-p0[0]], # 座標原点に移動
8 [ 0, 1,-p0[1]],
9 [ 0 ,0, 1]])
10 A2 = np.array([[ np.cos(rad),-np.sin(rad),0], # 回転
11 [ np.sin(rad), np.cos(rad),0],
12 [ 0, 0, 1]])
13 A3 = np.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.Tk()
21window.title('サンプル')
22
23frame1 = tk.Frame(window,bd=1,relief="ridge")
24frame1.grid(row=0, column=0,sticky='news')
25
26canvas = tk.Canvas(frame1, height=500, width=500, bg='white',bd=1,relief="ridge")
27canvas.pack()
28
29zukeidata=[ [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(zukeidata),2):
35 canvas.create_line(zukeidata[i][0], (zukeidata[i][1]*-1),zukeidata[i+1][0], (zukeidata[i+1][1]*-1),fill='black',width=1.0)
36
37 # 回転
38 lt = rotate([zukeidata[i][0], (zukeidata[i][1]*-1)],[300,300],90)
39 rb = rotate([zukeidata[i+1][0], (zukeidata[i+1][1]*-1)],[300,300],90)
40 canvas.create_line(lt[0],lt[1],rb[0],rb[1],fill='red',width=1.0)
41
42canvas.create_rectangle((300,300,300,300),fill='red') # 原点
43window.mainloop()
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/12/21 15:37