[英]Python — Using turtle graphics with nested lists. How do I solve this?
我有一個這樣的嵌套列表:
data_set_07 = [['A', 1, 3, 'S'], ['A', 2, 3, 'S'], ['A', 3, 1, 'S'],
['A', 3, 0, 'S'], ['A', 5, 2, 'S'], ['A', 5, 3, 'S'],
['B', 0, 0, 'S'], ['B', 0, 2, 'S'],
['C', 3, 2, 'S'], ['C', 4, 0, 'S'],
['D', 1, 0, 'S']]
'A'
, 'B'
, 'C'
和'D'
都是尺寸的引用(1x1、1x2、2x2等)。 這些數字是指圖形上特定的列和行, 'S'
代表“ SOUTH”(例如,圖標應朝南)。
我使用python上的turtle圖形繪制了4個不同的圖標,我需要在這些不同的設置下繪制每個圖標(有些比其他的小,並且在不同的位置,但都特定於列表中的數字)。
我需要知道的是,如何對代碼添加data_set_07
以便將我的圖標放在圖形上的正確位置,而不僅僅是默認位置?
我的與data_set_07
一起使用的圖標data_set_07
:
def NBC(data_set):
pu()
color('yellow')
begin_fill()
setheading(183)
pd()
fd(150)
circle(-40, 190)
right(19)
fd(165)
end_fill()
pu()
left(5)
fd(5)
left(173)
pd()
color('orange')
begin_fill()
pd()
fd(150)
circle(-40, 190)
right(19)
fd(165)
end_fill()
pu()
left(5)
left(173)
pd()
color('red')
begin_fill()
pd()
fd(150)
circle(-40, 190)
right(19)
fd(165)
end_fill()
pu()
setheading(90)
right(170)
left(168)
pd()
color('purple')
begin_fill()
pd()
fd(150)
circle(-40, 190)
right(19)
fd(165)
end_fill()
pu()
left(179)
pd()
color('blue')
begin_fill()
pd()
fd(150)
circle(-40, 190)
right(19)
fd(165)
end_fill()
pu()
left(180)
pd()
color('green')
begin_fill()
pd()
fd(150)
circle(-40, 190)
right(19)
fd(165)
end_fill()
pu()
NBC(data_set_07)
看起來您的圖標將始終被繪制為相同大小。 如果您希望能夠根據尺寸來改變大小(如我所言),則必須對圖標功能進行參數設置。 就像是
def NBC(height, width, x, y)
然后,您必須先添加代碼以移至(x,y)。 我已經好多年沒有看過海龜圖形了,所以我不能說確切的命令是什么。 之后,您必須按高度和寬度縮放運動。 (高度和寬度可以是默認大小的倍數,因此height = 1,width = 1表示使用默認大小繪制,height = 1,width = 2表示使用默認高度繪制,但寬度設為兩倍一樣大。)
如果您確實想像這樣更改長寬比,則可能不喜歡結果。 您還必須更改標題。 只需一點三角即可確定角度。 如果原始標題為theta,則新標題為
arctan(width*tan(theta)/height)
如果我沒有記錯的話。 您還可以通過將方向作為參數傳遞來使徽標面朝不同的方向。 如果默認方向是“ E”,那么您可以定義一個字典,例如
angle = {'E':0, 'N':90, 'W':180, 'S':270}
將所需方向作為參數phi傳遞,並向所有航向添加角度。
我可以建議您不要嘗試使所有這些工作一次完成。 首先將徽標移動到其他位置。 然后在比例不變的情況下進行縮放(寬度=高度)。 然后更改方向。 最后,如果確實需要,請嘗試更改長寬比。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.