如何在Python龟中绘制正弦?

时间:2014-01-04 08:34:05

标签: python turtle-graphics

在教科书中,代码可以绘制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)

6 个答案:

答案 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])