5

这里有人知道如何玩海龟并且知道如何使用海龟吗?

如下图所示,我无法让事情正常工作。[忽略颜色]

图片

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。

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

4

5 回答 5

5

尝试将您的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()
于 2013-09-21T19:41:45.867 回答
2

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

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

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

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

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


为这个答案的语气道歉。我是一个80后的孩子。我带着 Apple IIE 去了学习中心。多年后,我真的读了Mindstorms。很容易传播关于海龟的错误想法,这会损害它的教学价值,IMO。

于 2013-09-21T19:36:32.057 回答
2

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

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)

这是输出:

对不起,如果我的语法不准确。

于 2019-03-15T00:31:29.837 回答
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()
于 2021-07-27T07:55:26.907 回答
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)
于 2021-04-24T13:00:24.343 回答