繁体   English   中英

螺旋图龟蟒

[英]Spirograph Turtle Python

我如何与乌龟玩耍,如何使用乌龟?

如下图所示(忽略颜色),我无法让它正常工作。

图片

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()'

我正在尝试制作那种形状。 这是我到目前为止所做的编码。

尝试将您的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()

不! 你错过了乌龟的重点! 您应该尝试通过海龟的相对运动来完成这一切。 想想如果你是乌龟会如何绘制形状,在大地板上爬行,从你的屁股上拖着画笔。

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

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

因此,请考虑如何绘制螺旋线。 特别是,考虑画第一个圆圈。 当圆圈似乎关闭时,有趣的事情发生了:它错过了。 它错过了一点点,结果只是一个圆圈的一小部分。 正是这种缺失的曲率关闭了圆形的大图案,因为它们加起来是一个完整的转弯。

当整个图形绘制完成后,乌龟又回到了原来的位置和方向。

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

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)

这是输出:

抱歉,如果我的语法不准确。

你基本上让乌龟循环 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)

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

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()

使用带有随机颜色的 Python Turtle 的螺旋图

代码:

import random
from turtle import Turtle, Screen


tim = Turtle()
tim.shape("classic")


def turtle_color():
    R = random.random()
    G = random.random()
    B = random.random()
    return tim.pencolor(R, G, B)


tim.speed("fastest")


for _ in range(72):
    turtle_color()
    tim.circle(100)
    tim.left(5)


screen = Screen()
screen.exitonclick()

输出:

图片

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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