Функция масштабирования в питоне? (2.7.9)

В настоящее время я работаю с библиотекой черепах Python.

Я работаю над своим среднесрочным проектом для своего класса кодирования, и мой проект заключается в рисовании кривых cos, sin и tangent с использованием черепахи, а также их обратных функций.

Моя проблема в том, что когда я кодирую обратный грех, график отображается слишком маленьким, и пользователь не может его увидеть. Мне было интересно, есть ли функция масштабирования или способ растянуть график, чтобы сделать его больше?

Вот мой код для arcsin:

def drawarcsincurve(amplitude, period, horShift, verShift):
    turtle.speed(0)
    startPoint = -1 
    turtle.goto(startPoint, math.asin(startPoint))
    turtle.pendown()
    for angles in range(-1,1):
        y = math.asin(angles)
        turtle.goto(angles,y)

person Nicholas Roberts    schedule 15.03.2015    source источник
comment
Вам не нужно масштабировать, просто увеличьте амплитуду. Используйте значение масштабирования и умножьте его на результат вашей функции: y = 10 * math.sin(angles) значение 10 — это просто пример. Вы можете использовать любое значение, которое посчитаете нужным.   -  person Reticulated Spline    schedule 15.03.2015
comment
Верно, я на самом деле пробовал это изначально, но все, что я получил, это просто более длинная линия, которая выглядит как очень сплющенная кривая арксинуса. Спасибо за ответ кстати. @reculated Сплайн   -  person Nicholas Roberts    schedule 15.03.2015
comment
Вам также придется расширяться в горизонтальном (x) направлении. Я только что заметил, что у вас есть два параметра функции amplitude и period. Используйте эти параметры.   -  person Reticulated Spline    schedule 15.03.2015
comment
Итак, вы предлагаете мне изменить его на y = амплитуда * math.sin (углы / амплитуда) ??   -  person Nicholas Roberts    schedule 15.03.2015
comment
Нет; вы не хотите использовать amplitude в своей функции sin. Вы захотите использовать period. Взгляните на этот ответ.   -  person Reticulated Spline    schedule 17.03.2015


Ответы (1)


Я думаю, что ваша главная проблема здесь - это диапазон, в котором вы повторяете свою переменную angles. Линия

for angles in range(-1,1):

выполнит цикл только дважды, с angle == 1 и angle == 0 - т.е. это эквивалентно использованию

for angles in [-1,0]:

Введите range(-1,1) в окне интерпретатора Python, чтобы понять, что я имею в виду.

Вы тоже можете запутаться в именах. Вы называете свою переменную цикла angles, но на самом деле она представляет отношение (значение синуса, обратное значение которого вы вычисляете).

То, что вы, вероятно, действительно хотите, это что-то, что перебирает диапазон от -1 до 1 с довольно небольшими шагами. Давайте выберем 0.01 в качестве нашего шага (это произвольно)

Я изменил ваш код напрямую, а не выполнял свою собственную реализацию.

  1. Я ввел масштабный коэффициент (plot_scale), который эквивалентен масштабу, который, я думаю, вам нужен в исходном вопросе.
  2. Я оставил ваши исходные аргументы функции, хотя я их не использую. Я подумал, что ты, возможно, захочешь поиграть с ними позже.

def drawarcsincurve(amplitude, period, horShift, verShift):
    plot_scale = 100 # Arbitrary value - up to you - similar to "zoom"
    turtle.speed(1)
    turtle.penup() 
    startPoint = -1 
    turtle.goto(plot_scale*startPoint, plot_scale*math.asin(startPoint))
    turtle.pendown()
    for angles in range(-100,100):
        sinval = 1.0 * angles / 100 # this will run -1 to 1 in 0.01 steps
        y = math.asin(sinval)
        turtle.goto(plot_scale*sinval,plot_scale*y)

Это выводит:

График кривой арксинуса на графике Python Tk

person J Richard Snape    schedule 17.03.2015
comment
Спасибо за ответ! Это круто - person Nicholas Roberts; 20.03.2015
comment
Спасибо - пожалуйста, примите и поддержите ответ, чтобы поблагодарить здесь :) stackoverflow.com/help/someone-answers - person J Richard Snape; 20.03.2015