如何用Python绘制正弦曲线?

如何用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


我不知道为什么?为什么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()