Spirograph Turtle Python

时间:2013-09-21 19:30:49

标签: python turtle-graphics

这里有人知道如何玩乌龟,并知道如何使用乌龟?

我无法按照下图所示的方式工作。 [忽略颜色]

Image

from turtle import *
from math import *


def formulaX(R, r, p, t):
    x = (R-r)*cos(t) - (r+p)*cos((R-r)/r*t)

def formulaY(R, r, p, t):
    y = (R-r)*sin(t) - (r+p)*sin((R-r)/r*t)

def t_iterating(R, r, p):
    t = 2*pi
    up()
    goto(formulaX, formulaY)
    down()

    while (True):
        t = t+0.01
        formulaX(R, r, p, t)
        formulaY(R, r, p, t)


def main():
    R = int(input("The radius of the fixed circle: "))
    r = int(input("The radius of the moving circle: "))
    p = int(input("The offset of the pen point, between <10 - 100>: "))

    if p < 10 or p > 100:
        input("Incorrect value for p!")

    t_iterating(R, r, p)

    input("Hit enter to close...")

main()'

我正在努力做出那种形状。这是我到目前为止所做的编码。我对python不好。

谢谢。我需要帮助。谢谢!

5 个答案:

答案 0 :(得分:2)

没有!你错过了乌龟的观点!您应该尝试使用乌龟的相对运动来完成所有操作。想想如何你是乌龟,在大地板上爬行,从你的屁股拖动画笔。

在每个小片段的时间里,乌龟将执行微分方程的一个小迭代,该微分方程控制整个行为。预先计算x y坐标并使用龟的GOTO函数通常不明智。

龟本身应该只对周围环境有相关了解。它有一个方向和一个位置。并且通过转动和移动来修改这两个状态。

所以,想想你将如何绘制螺旋线。特别是,考虑绘制第一个圆圈。当圆圈似乎关闭时,会发生一些有趣的事情:它错过了。它错过了一小部分,结果只是一个圆圈的一小部分。正是这个缺失的曲率关闭了圆圈中的大圆圈图案,因为它们累加了一整圈。

当绘制整个人物时,乌龟回到原来的位置和方向。


对这个答案的基调道歉。我是一个80多岁的孩子。我和Apple IIE一起去了学习中心。多年后,我实际上读了 Mindstorms 。很容易传播关于乌龟的错误想法,这会损害其教学价值,IMO。

答案 1 :(得分:2)

尝试将t_iterating功能更改为:

def t_iterating(R, r, p):
    t = 2*pi          # It seems odd to me to start from 2*pi rather than 0.
    down()

    while t < 20*pi:  # This loops while t goes from 2*pi to 20*pi.
        t = t+0.01
        goto(formulaX(R, r, p, t), formulaY(R, r, p, t))
    up()

答案 2 :(得分:0)

这是我的代码。颜色可能不准确,但是这里是:

from turtle import *
from random import randint
speed(10000)
for i in range(20):
    col = randint(1, 5)
    if col == 1:
        pencolor("orange")
    elif col == 2:
        pencolor("blue")
    elif col == 3:
        pencolor("green")
    elif col == 4:
        pencolor("purple")
    elif col == 5:
        pencolor("dark blue")
    circle(50)
    left(20)

这是输出:

SOrry If my grammar isn't exact.

希望这会有所帮助!

答案 3 :(得分:0)

我仍在学习,因此代码不简洁,但它有效,希望对那些寻求帮助的人有意义。

您基本上可以让海龟在 360 度之间循环,并且您可以选择两种笔颜色。

from turtle import Turtle, Screen


tim = Turtle()
tim.shape("turtle")
tim.color("green")

### total degrees in circle = 360
### turn left must be a divisor of 360 (1, 2, 3, 4, 5, 6, 8, 9, 10, 12, 15, 18, 20, 24, 30, 36, 40, 45, 60, 72, 90) NOTE: some divisors do not work as well
degrees = 360
turn_left = 12
total_circles = int(degrees / turn_left)
tim.pensize(3)
tim.speed(0)


def circle_colour1():
    ### choose your colour here:
    tim.pencolor("pink")
    tim.circle(-100)
    tim.left(turn_left)


def circle_colour2():
    ### choose your colour here:
    tim.pencolor("grey")
    tim.circle(-100)
    tim.left(turn_left)


for _ in range(0, int(total_circles / 2)):
    circle_colour1()
    circle_colour2()


screen = Screen()
screen.exitonclick()

真正的基本 (360°/10) 是:

from turtle import Turtle as d

draw = d()
draw.speed(0)
draw.pensize(3)

for _ in range(0, 36):
    draw.circle(-100)
    draw.left(10)

答案 4 :(得分:0)

我的代码在这里,该函数是为自动选择随机颜色而构建的。

from turtle import Turtle, Screen
import random

timmy = Turtle()
screen = Screen()
screen.colormode(255)
timmy.shape("turtle")
timmy.speed("fastest")
angle = [0, 90, 180, 270]


def random_color():
    red = random.randint(0, 255)
    green = random.randint(0, 255)
    blue = random.randint(0, 255)
    colour = (red, green, blue)
    return colour


def draw_circles(num_of_gap):
    for _ in range(int(360 / num_of_gap)):
        timmy.color(random_color())
        timmy.circle(100)
        timmy.right(num_of_gap)


draw_circles(20)

screen.exitonclick()