【问题标题】:How was this Python Turtle graphic made?这个 Python Turtle 图形是如何制作的?
【发布时间】:2017-01-10 02:24:53
【问题描述】:

我的朋友向我展示了这张她使用 Python 内置的 Turtle module 制作的惊人图片,并要求我了解它是如何制作的。她给了我一个提示:这张图片是用 10 行代码生成的。

从我的问题你可能已经知道我不知道。我尝试了一大堆东西,但我不知道她是如何在仅 10 行中用 如此 详细图案制作一个实心圆圈的。我已经放弃自己弄清楚了,我的朋友不会告诉我,所以任何能够制作出 10 行来制作相似图像的人都会因为弄清楚它而获得所有功劳:P

注意:我不确定这是否适合 StackOverflow,所以我很乐意在其他地方询问(让我知道),但是这个 使用 Python 代码制作的,所以我认为有人在编程论坛上可能有经验来解决它。

【问题讨论】:

  • 如果你从某个地方开始向前走 10 步,然后在一个循环中旋转 179 度,然后再向前走 10 步,你最终会得到这样的结果。然后你只需要找出与这张图片匹配的步数和大小。
  • 也许你能找到一些提示here
  • 那些“详细的模式”看起来只是计算机图形离散特性的产物。我不确定这个词是什么;它可能符合moiré。在任何情况下,看起来他们只是从图像中心画了一堆间距很近的线条,而这些图案是这样做的自动结果。
  • 你的朋友提示真的没用。她是否意识到您可以将多少代码塞进 10 行代码中! Python 确实有分号。
  • 我用两条线创造天堂! from nonuniverse import heaven; heaven.build_pls('Bahama','Tokyo') 你知道有多少行包含整个turtle 库吗?

标签: python graphics turtle-graphics


【解决方案1】:

经过一些调整,我发现这个,我认为非常接近图像,正好有 10 行。

import turtle
bob = turtle.Turtle()
bob.speed(0)
for i in range(632):
    bob.forward(200)
    bob.right(1)
    bob.forward(100)
    bob.setpos(0,0)
    bob.left(1.57)
turtle.done()

编辑:还有更多,用单线画,得到这个,没想到:

import turtle
bob = turtle.Turtle()
bob.speed(0)
for i in range(1080):
    bob.forward(300)
    bob.setpos(0,0)
    bob.left(0.33333)
turtle.done()

并用三角形绘制:

import turtle
bob = turtle.Turtle()
bob.speed(0)
for i in range(720):
    bob.forward(50)
    bob.right(19)
    bob.forward(250)
    bob.setpos(0,0)
    bob.left(19.5)
turtle.done()

【讨论】:

  • 很酷的图案!我不知道这些人工制品有多复杂 :)
【解决方案2】:

这就是我相信您正在寻找的东西:

Python 2.7.5 (default, Mar  9 2014, 22:15:05) 
[GCC 4.2.1 Compatible Apple LLVM 5.0 (clang-500.0.68)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import turtle
>>> t = turtle.Pen()
>>> for i in range(1000):
...     t.forward(100)
...     t.backward(100)
...     t.left(79)
... 

输出:

这是您在问题中显示的输出的一个微型示例。 基本上,它的工作方式是每次乌龟笔前进和回来时,笔都会转动。这会重复多次,以创建那些“详细模式”。另外,你的朋友可能有点误导你,因为这比十行短得多。

【讨论】:

  • 哇——比我的回答还少!感谢您花时间:)
【解决方案3】:

感谢@citaret 和@JerryJeremiah 的建议,我能够在不到 10 行的时间内拼凑出与图片相似的结果:

from turtle import Turtle, Screen
mr_turtle = Turtle()
screen = Screen()
mr_turtle.speed(0)
for i in range(1800):
    mr_turtle.forward(300)
    mr_turtle.right(179.9)
screen.exitonclick()

谢谢大家!

【讨论】:

    猜你喜欢
    • 2019-08-08
    • 2020-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 2017-11-09
    • 1970-01-01
    相关资源
    最近更新 更多