Тригонометрия в turtle python
Есть два куска кода, которые рисуют сердце: 1.
def heart(x):
return 16*math.sin(x)**3
def heart1(x):
return 13*math.cos(x) - 5*math.cos(2*x) - 2*math.cos(3*x) - math.cos(4*x)
screensize(3000, 3000)
k = 20
bgcolor('black')
color('white')
for i in range(6000):
goto(heart(math.radians(i))*k, heart1(math.radians(i))*k)
done()
2.
def heart(x):
return 16*math.sin(x)**3
def heart1(x):
return 13*math.cos(x) - 5*math.cos(2*x) - 2*math.cos(3*x) - math.cos(4*x)
screensize(3000, 3000)
k = 20
bgcolor('black')
color('white')
for i in range(6000):
goto(heart(i)*k, heart1(i)*k)
done()
Я не понимаю, почему при передаче угла в радианах и в градусах способ построения отличается?
Ответы (1 шт):
Давайте нарисуем оба варианта на одном холсте. Не будем только второй так долго рисовать, чтобы было понятнее. И в радианы сами примерно переведём, просто разделив на 57. И сдвинем вторую картинку на 1 пиксел вправо для наглядности. А так мы используем один и тот же код функций heart и heart1, он у вас совпадает в обеих частях, различаются только аргументы, с которыми они вызываются.
import math
from turtle import *
def heart(x):
return 16*math.sin(x)**3
def heart1(x):
return 13*math.cos(x) - 5*math.cos(2*x) - 2*math.cos(3*x) - math.cos(4*x)
screensize(3000, 3000)
k = 20
bgcolor('black')
# часть 1
color('white')
for i in range(360):
goto(heart(i/57)*k, heart1(i/57)*k)
# возврат в нулевую точку после первой части
up()
goto(1, 0)
down()
# часть 2
color('red')
for i in range(60):
goto(heart(i)*k + 1, heart1(i)*k)
done()
Первый вариант рисует точки очень близко друг к другу, из-за чего создаётся впечатление сплошной линии.
А вот второй вариант рисования графика берёт точки на том же самом силуэте сердца, и точно так же соединяет их прямой линией, но берутся эти точки во втором варианте далеко друг от друга. Из-за этого у нас получается не силуэт сердца, а некая область, закрашенная линиями, концы которых лежат на силуэте сердца.
Давайте для наглядности вообще 7 точек оставим от второго варианта, пройдя только один раз по силуэту сердца.
В общем, всё дело в размере шага при рисовании. В первом варианте шаг вычисления точек в 57 раз мельче второго варианта, из-за этого мы получаем сплошное сердце в первом варианте и хитрый набор линий с концами на силуэте этого сердца во втором варианте.


