Войти
или
Зарегистрироваться
Маркетплейс
Курсы
Учебник
Учебник 2.0
ОГЭ/ЕГЭ
Олимпиады
Рубрикатор
Компилятор
Онлайн Компилятор
Компилятор Python (lite)
Редактор HTML Code
Статья Автор:
Юровский Егор
Куб и сечения куба
import turtle as tr def tran(d): ex = (1, 0) ey = (0, 1) ez = (0.3, 0.4) x = d[0] * ex[0] + d[1] * ey[0] + d[2] * ez[0] y = d[0] * ex[1] + d[1] * ey[1] + d[2] * ez[1] return (x, y) def sred(p, q, k): a, b = k[p], k[q] return ((a[0] + b[0]) / 2, (a[1] + b[1]) / 2, (a[2] + b[2]) / 2) def lines(a, k, t): t.up() t.goto(k[a[0]]) t.down() for p in a: t.goto(k[p]) def lines_(a, k, t): t.up() t.goto(tran(k[a[0]])) t.down() for p in a: t.goto(tran(k[p])) t1 = tr.Pen() m = 120 kub = {'A': (0, 0, 0), 'B': (0, 1, 0), 'C': (1, 1, 0), 'D': (1, 0, 0)} kub.update({'A1': (0, 0, 1), 'B1': (0, 1, 1), 'C1': (1, 1, 1), 'D1': (1, 0, 1)}) kub.update({'T1': sred('A', 'D', kub), 'T2': sred('A', 'B', kub), 'T3': sred('B', 'C', kub), 'T4': sred('C', 'D', kub), 'T6': sred('A1', 'D1', kub), 'T7': sred('A1', 'B1', kub), 'T8': sred('B1', 'C1', kub), 'T9': sred('C1', 'D1', kub), 'T5': sred('A', 'A1', kub), 'T11': sred('B', 'B1', kub), 'T10': sred('C', 'C1', kub), 'T12': sred('D', 'D1', kub), 'O1': sred('A', 'C', kub), 'O2': sred('A', 'B1', kub), 'O3': sred('A1', 'C1', kub), 'O4': sred('D', 'C1', kub), 'O5': sred('A', 'D1', kub), 'O6': sred('B', 'C1', kub), 'Q': sred('A', 'C1', kub)}) for dot in kub: kub[dot] = (kub[dot][0] * m, kub[dot][1] * m, kub[dot][2] * m) lines_(['A','B','C','D','A'], kub,t1) lines_(['A1','B1','C1','D1','A1'], kub,t1) lines_(['A','A1','B1','B'], kub,t1) lines_(['C','C1','D1','D'], kub,t1) t1 = tr.Pen() # создаем полотно m = 10 # задаем масштаб e = (2*m, 5*m) # вектор AB f = (12*m,0*m) # вектор AD h = (0*m, 12*m) # вектор AA1 print(kub) t1.up() # подняли перо и задали цвет t1.color('red') for p1 in kub: # обход и подпись вершин t1.goto(tran(list(kub[p1]))) t1.dot(5) t1.write(p1,font=("Courier", 8, "bold")) tr.done()
×
import turtle as tr import math def offset(num): offset = -200 return num + offset def edge(t): top1, top2 = kub[t[0]], kub[t[1]] tr.up() tr.setpos(map(offset,top1)) tr.down() tr.goto(map(offset,top2)) def dashed_segment(tr, segment, dash_length=10, gap_length=5): (x1, y1), (x2, y2) = segment tr.penup() tr.goto(x1, y1) tr.pendown() dx, dy = x2 - x1, y2 - y1 length = math.sqrt(dx**2 + dy**2) angle = math.degrees(math.atan2(dy, dx)) tr.setheading(angle) drawn = 0 while drawn < length: step = min(dash_length, length - drawn) tr.forward(step) drawn += step if drawn < length: tr.penup() step = min(gap_length, length - drawn) tr.forward(step) drawn += step tr.pendown() a = 1 m=300 #маштаб kub = {"A":(0,0), "B":(0, a*m), "A1":(a*m, 0), "B1":(a*m, a*m), "D":(a*m*math.cos(math.radians(45)), a*m*math.sin(math.radians(45))), "D1":(a*m*math.cos(math.radians(45))+a*m, a*m*math.sin(math.radians(45))), "C":(a*m*math.cos(math.radians(45)), a*m*math.sin(math.radians(45))+a*m), "C1":(a*m*math.cos(math.radians(45))+a*m, a*m*math.sin(math.radians(45))+a*m)} p=tr.Turtle() screen=tr.Screen() tr.speed(1000) for p in kub: tr.up() tr.setpos(map(offset, kub[p])) #tr.write(p, kub[p]) tr.dot(5) tr.down() vert=[('A', 'B'), ('A', 'D'), ('A', 'A1'), ('D1', 'A1'), ('D1', 'C1'), ('D1', 'D'), ('C1', 'C'), ('B1', "B"), ('C', 'D'), ('C', 'B'), ('A1', 'B1'), ('C1', 'B1')] for p in vert: if p != ('A', 'D') and p != ('D1', 'D') and p != ('C', 'D'): edge(p) else: dashed_segment(tr, (map(offset, kub[p[0]]), map(offset, kub[p[1]])), dash_length=15, gap_length=8) for p in kub: tr.up() tr.setpos(map(offset, kub[p])) tr.write(p, kub[p]) tr.down() tr.done()
×
Чтобы оставить комментарий нужна авторизация
Печать