Форум сайта python.su
0
Черепаха и вписанные многоугольники.
import turtle import math def nugolnik(x): for i in range(x): sin=math.pi/x shag=10*x*2*math.sin(sin) s=180*(x-2) turtle.left(180-s/x) turtle.forward(shag) def otstup(t): turtle.penup() turtle.forward(10) turtle.pendown() turtle.shape('turtle') b=3 while b<=20: s=180*(b-2) turtle.left((s/b)/2) nugolnik(b) turtle.right((s/b)/2) otstup(b) b+=1 turtle._root.mainloop()
Отредактировано Dlubochanin (Фев. 26, 2020 21:27:37)
Офлайн
0
ramiПривет.
перед рисованием сторон нужно развернуть “черепашку” на половину внутреннего угла между сторонами (у треугольника 3 угла по 60° — разворачиваем на 30°, у квадрата 4 угла по 90° — разворачиваем на 45°, и т.д., это нужно посчитать), после завершения фигуры разворачиваем “черепашку” обратно на этот угол.
import turtle import math n = 3 z = 0 a = 360 / n line = 50 def triangles(): turtle.shape("turtle") turtle.pendown() turtle.left(a) turtle.forward(line) def move(): turtle.penup() turtle.goto(z,0) for c in range(10): turtle.left((180-360/n)/2) for c in range(n): triangles() turtle.right((180-360/n)/2) n += 1 z += 15 line += 5 a = 360 / n move()
Отредактировано Romanteg (Апрель 6, 2020 09:47:44)
Офлайн
0
whiteПросто нужно посмотреть, какой шаг у архимедовой спирали: он равен 2 * pi
А кто подскажет как шестое упражнение сделать? Вообще идей нету)
Офлайн
0
Ух, конечно и задача
Тоже промаялся с ней 4 дня)
Сначала писал вместо np.sin(np.pi/n) np.sin(180/n) и понятно, что ничего не получалось, радиус вообще отрицательный был) Потом еще долго маялся с углами, пока не нарисовал рисунок и осознал, что угол не 180/2n, а есть специальная формула в зависимости от фигуры. В итоге всё таки написал требуемую функцию, вроде работает)
import turtle import numpy as np turtle.shape('arrow') turtle.speed(1) def right_figure(n): a = 30 R = n*a/(2*np.sin(np.pi/n)) R_1 = (n+1)*a/(2*np.sin(np.pi/(n+1))) turtle.color('red') turtle.left(180*(n-2)/(2*n) ) for i in range(n): turtle.left(360/n) turtle.forward(a*n) turtle.penup() turtle.right(180*(n-2)/(2*n)) turtle.forward(R_1 - R) turtle.pendown() for n in range(3,10): right_figure(n)
Отредактировано Ilyxa1998 (Авг. 24, 2021 01:42:29)
Офлайн
0
у меня вот как получилось решить задачу о 10 вложенных квадратах
import turtle t = turtle.Turtle() t.shape('turtle') t.speed(10) x = 10 for z in range(10): for i in range(4): t.forward(x) t.left(90) t.penup() t.backward(5) t.right(90) t.forward(5) t.left(90) t.pendown() x += 10
Отредактировано UserizPosada (Март 2, 2022 09:14:48)
Офлайн