###前提・実現したいこと
pythonの図形描画ライブラリTkinterのcanvasウィジェットを使って、以下の画像のような図形を出力したいが、うまくいきません。よろしくお願いします。
y軸の変換に問題があるようなのですが、あと一歩がわかりません。
###該当のソースコード
python
1# coding: utf-8 2# Here your code ! 3# 4 5from tkinter import * 6from math import * 7 8x = [ 35, 19, 10, 3, 0, -3, -10, -19, -35] 9y = [-20, -20, -5, -5, 0, -5, -5, -20, -20] 10N = 9 11rd = pi/180 12m = 70.0 13h = m*sqrt(3.0)/2 14 15root = Tk() 16c0 = Canvas(root, width=m*10, height=h*10) 17 18b = 1 19y0 = h/3 20while y0 < int(c0.cget('height')): 21 a = 1 22 x0 = m/2 23 while x0 < int(c0.cget('width')): 24 x1 = x0 25 y1 = y0 26 for j in range(3): 27 for k in range(N): 28 x2 = x[k]*cos(120*j*rd) - y[k]*sin(120*j*rd) + x0 29 y2 = x[k]*sin(120*j*rd) + y[k]*cos(120*j*rd) + y0 30 if a*b == -1: 31 y2 = -y2+h 32 if k != 0: 33 c0.create_line(x1, y1, x2, y2) 34 x1 = x2 35 y1 = y2 36 a = -a 37 x0 += m/2 38 b = -b 39 y0 += h 40c0.pack() 41 42root.mainloop() 43
###追加
ちなみに、turtleを使って書くとこうなりました。
python
1# coding: utf-8 2# Here your code ! 3# 4# 対称模様 5# 6 7from turtle import * 8from math import * 9 10x = [ 35, 19, 10, 3, 0, -3, -10, -19, -35] 11y = [-20, -20, -5, -5, 0, -5, -5, -20, -20] 12N = 9 13 14rd = pi/180 15m = 70.0 16h = m*sqrt(3.0)/2 17 18setup(width=m*10, height=h*10, startx=None, starty=None) 19setworldcoordinates(0, -h*10, m*10, 0) 20 21b = 1 22y0 = 2*h/3 23while y0 < window_height(): 24 a = 1 25 x0 = m/2 26 while x0 < window_width(): 27 up(); goto(x0, y0); down() 28 for j in range(3): 29 for k in range(N): 30 px = x[k]*cos(120*j*rd) - y[k]*sin(120*j*rd) + x0 31 py = x[k]*sin(120*j*rd) + y[k]*cos(120*j*rd) - y0 32 if a*b == -1: 33 py = -py-h 34 if k == 0: 35 up(); goto(px, py); down() 36 else : 37 goto(px, py) 38 a = -a 39 x0 += m/2 40 b = -b 41 y0 += h 42 43exitonclick() 44
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。