繁体   English   中英

Python —将带龟的图形与嵌套列表一起使用。 我该如何解决?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM