2014-01-04 7 views
0

В текстовой книге код может рисовать sin (x).как рисовать грех в черепахе python?

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)?

+1

Является ли это действительно код из текста книги? Я имею в виду, что это выглядит плохо, особенно если оно предназначено для обучения чему-то. Который вы вроде как хорошо иллюстрируете. Его можно легко разделить на 3 строки с комментариями. Масштабировать y, масштаб x, конвертировать в радианы и рисовать. Я действительно обеспокоен качеством книги и ее доблестными учениями. – luk32

ответ

3

Отработать у-координаты точек, которые втягиваются:

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 означает, что у-координаты идут от -50 до 50, что позволяет увидеть график намного лучше.

Аргументы функции sin аналогично масштабируются для перехода от -3.5π до 3.5π, поскольку автор этого сценария считает, что это будет хороший диапазон для оси x. И обратите внимание, что код делает 350 шагов, поскольку он идет слева направо.

Итог в том, что этот код считал его автор «хорошим».

1

ИМХО, это уравнение используется для преобразования степени (180) в радиан (math.pi, 3.141592 ...).

BTW, если вы используете Python 2.7, замените x/100 на x/100.0. В противном случае вы получите плоскую линию вместо sin волна.

>>> 1/100 
0 
>>> 1/100.0 
0.01 
1

range() обрабатывает только целые значения грациозно. Поэтому они решили использовать целочисленные значения для оси x и отобразить 100 единиц в полный период синуса. Код отображает 3 1/2 периода, от -1,75 * 2pi до 1,75 * 2pi.

Затем результат отображается в диапазоне [-50..50], чтобы иметь чистые координаты для y.

0

составить список, содержащий все х и у значений в виде кортежа, а затем просто установить позицию черепахи :)

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]) 
Смежные вопросы