在教科书中,代码可以绘制sin(x)
。
for x in range(-175,176):
turtle.goto(x,50*math.sin((x/100)*2*math.pi))
我不知道为什么?为什么sin(x)
是50*math.sin((x/100)*2*math.pi)
?
答案 0 :(得分:3)
计算出绘制点的y坐标:
50 * sin((-175/100) * 2π)
50 * sin((-174/100) * 2π)
50 * sin((-173/100) * 2π)
...
50 * sin((175/100) * 2π)
50 * sin((176/100) * 2π)
50简单地缩放,因为sin
值介于0和1之间,因此乘以50意味着y坐标从-50到50,这使您可以更好地查看图形。
sin函数的参数类似地缩放为-3.5π到3.5π,因为该脚本的作者认为x轴的范围很好。请注意,代码从左到右进行350步。
最重要的是,该代码被其作者认为“看起来不错”。
答案 1 :(得分:2)
更简单的答案就是这样。
import math
import turtle
wn = turtle.Screen()
wn.bgcolor('lightblue')
fred = turtle.Turtle()
sc = turtle.Screen()
sc.reset()
sc.setworldcoordinates(0,-1.5,360,1.5)
for angle in range(360):
y = math.sin(math.radians(angle))
fred.goto(angle,y)
wn.exitonclick()
这里sc.setworldcoordinates(0,-1.5,360,1.5)+
将碎石分成
坐标范围从x:0,360和y:-1.5,1.5
y = math.sin(math.radians(angle))
将天使转换为罪恶的颂歌。
答案 2 :(得分:1)
恕我直言,该等式用于将度数(180)转换为弧度(math.pi,3.141592 ......)。
顺便说一句,如果您使用Python 2.7,请将x/100
替换为x/100.0
。否则你会得到扁平线而不是 sin wave。
>>> 1/100
0
>>> 1/100.0
0.01
答案 3 :(得分:1)
range()
只能优雅地处理整数值。因此,他们选择对x轴使用整数值,并将100个单位映射到完整的正弦周期。代码显示3 1/2个周期,从-1.75 * 2pi到+ 1.75 * 2pi。
然后将结果映射到范围[-50..50],以便为y提供干净的坐标。
答案 4 :(得分:1)
更简单的答案就是这样。
我喜欢@HardCoder对setworldcoordinates()
所做的操作,但我看不到两次调用turtle.Screen()
并将其存储在两个不同的变量下如何使事情变得更简单,甚至也没有必要。
使所有这些实现混乱的原因是,我们需要为math.sin()
使用 radians ,但要为range()
整数使用 degrees 。缺少使用比例因子或numpy的浮动范围运算符的一种简单方法,即消除度/弧度转换,是转储range()
:
from turtle import Turtle, Screen
from math import pi, sin as sine
screen = Screen()
screen.setworldcoordinates(0, -1.25, 2 * pi, 1.25)
turtle = Turtle()
angle = 0
while angle < 2 * pi:
turtle.goto(angle, sine(angle))
angle += 0.1
screen.exitonclick()
答案 5 :(得分:-1)
制作一个包含所有x和y值的列表作为元组,然后设置乌龟的位置:)
import math,turtle,threading
sine_line=[]
cos_line=[]
amp=100
for x in range(0,1000,10):
sine_line.append((x/10,amp*math.sin(math.radians(x))))
cos_line.append((x/10,amp*math.cos(math.radians(x))))
window=turtle.Screen()
myT=turtle.Turtle()
myT2=turtle.Turtle()
for x in range(0,len(sine_line)):
myT2.setpos(cos_line[x][0],cos_line[x][1])
myT.setpos(sine_line[x][0],sine_line[x][1])