如何用Python绘制正弦曲线?
在教科书中,代码可以绘制sinx如何用Python绘制正弦曲线?,python,turtle-graphics,Python,Turtle Graphics,在教科书中,代码可以绘制sinx 我不知道为什么?为什么sinx是50*math.sinx/100*2*math.pi?IMHO,该方程用于将180度转换为弧度math.pi,3.141592 顺便说一句,如果您使用Python2.7,请将x/100替换为x/100.0。否则你会得到平线而不是正弦波 范围仅优雅地处理整数值。因此,他们选择对x轴使用整数值,并将100个单位映射为一个完整的正弦周期。代码显示3个半周期,从-1.75*2pi到+1.75*2pi 然后将结果映射到范围[-50..50]
我不知道为什么?为什么sinx是50*math.sinx/100*2*math.pi?IMHO,该方程用于将180度转换为弧度math.pi,3.141592 顺便说一句,如果您使用Python2.7,请将x/100替换为x/100.0。否则你会得到平线而不是正弦波 范围仅优雅地处理整数值。因此,他们选择对x轴使用整数值,并将100个单位映射为一个完整的正弦周期。代码显示3个半周期,从-1.75*2pi到+1.75*2pi
然后将结果映射到范围[-50..50],以便获得y的干净坐标。计算出所绘制点的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π)
因为sin值在0到1之间,所以50只是放大,所以乘以50意味着y坐标从-50到50,使您能够更好地查看图形
sin函数的参数类似地从-3.5π扩展到3.5π,因为该脚本的作者认为这对于x轴来说是一个很好的范围。请注意,代码从左到右执行350步
底线是,作者认为这段代码看起来不错。制作一个包含所有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])
更简单的答案是这样的
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.5360,1.5+将屏幕划分为
坐标范围为x:0、360和y:-1.5、1.5
y=math.sinmath.RadiangSangleConvert天使到罪恶之城
更简单的答案是这样的
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()
我喜欢@HardCoder对setworldcoordinates所做的工作,但我不明白调用两次turtle.Screen并将其存储在两个不同的变量下如何使事情变得更简单,也不明白为什么需要这样做
使所有这些实现变得混乱的是,我们需要对math.sin使用弧度,但对范围整数使用度。除了使用缩放因子或numpy中的浮动范围操作符外,保持简单的一种方法,即消除度/弧度转换,是转储范围:
这真的是教科书上的代码吗?我的意思是它看起来很糟糕,特别是如果它是为了教一些东西的话。你很好地证明了这一点。它可以很容易地分为3行,带有注释。缩放y、缩放x、转换为弧度并绘制。我真的很关心这本书的质量和它的教学勇气。
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()
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()