Прикреплённый файл «fig.py»
Загрузка 1 #!/usr/bin/env python
2 # coding: utf
3 '''
4 Фигура задаётся как набор ломаных, представляющих собой последовательность координат точек, например
5
6 1,1;1,10;10,10;10,1;1,1 2,2;9,12;12,9;2,2
7
8 Абсцисса отделяется от ординаты запятой, координаты разделяются точкой с запятой, ломаные — пробелом.
9 Ввести произвольную фигуру и нарисовать её
10
11 + в следующей строке ввести тройку вида угол_поворота,масштаб и нарисовать эту фигуру с поворотом и в ином масштабе
12
13 /!\ ввести несколько троек и нарисовать фигуры рядом
14
15
16 '''
17
18 from math import *
19 from turtle import *
20
21 def scale(A0,B0,A1,B1,x):
22 return float(x-A0)/(B0-A0)*(B1-A1)+A1
23
24 def rotate(M,O,A):
25 X=(M[0]-O[0])*cos(A)-(M[1]-O[1])*sin(A)+O[0]
26 Y=(M[1]-O[1])*cos(A)+(M[0]-O[0])*sin(A)+O[1]
27 return X,Y
28
29 def rotoscale(dots,m,M,alpha):
30 # списки абсцисс и ординат
31 X,Y = zip(*dots)
32 mx,Mx,my,My=min(X),max(X),min(Y),max(Y)
33 # перенос+масштабирование всех точек
34 ds = [(scale(mx,Mx,m[0],M[0],x),scale(my,My,m[1],M[1],y)) for x,y in dots]
35 center = (m[0]+M[0])/2.,(m[1]+M[1])/2.
36 # поворот всех точек относительно центра целевого прямоугольника
37 return [rotate(d,center,alpha) for d in ds]
38
39 def rotoscales(lines,m,M,alpha):
40 return [rotoscale(lin,m,M,alpha) for lin in lines]
41
42 def draw(lines,col="black"):
43 up()
44 for line in lines:
45 goto(*line[0])
46 down()
47 color(col)
48 for x,y in line[1:]:
49 goto(x,y)
50 up()
51
52 reset()
53 lines=[[map(int,coord.split(",")) for coord in line.split(";")] for line in raw_input().split()]
54
55 xlines,ylines=zip(*sum(lines,[]))
56 mx,Mx,my,My=min(xlines),max(xlines),min(ylines),max(ylines)
57 w,h=Mx-mx,My-my
58
59 draw(lines)
60
61 AS=raw_input()
62 while AS:
63 a,s=map(float,AS.split(","))
64 W,H=w*s,h*s
65 ll=rotoscales(lines,(mx*W/w,my*H/h),(Mx*W/w,My*H/h),a)
66 draw(ll)
67 AS=raw_input()
68
69 exitonclick()
Прикреплённые файлы
Для ссылки на прикреплённый файл в тексте страницы напишите attachment:имяфайла, как показано ниже в списке файлов. Не используйте URL из ссылки «[получить]», так как он чисто внутренний и может измениться.- [получить | показать] (2015-01-23 10:50:02, 0.4 KB) [[attachment:checkboard.py]]
- [получить | показать] (2015-01-23 14:31:37, 2.3 KB) [[attachment:fig.py]]
- [получить | показать] (2015-01-23 11:12:53, 0.4 KB) [[attachment:rainbow.py]]
- [получить | показать] (2015-01-23 10:32:18, 0.3 KB) [[attachment:spiral.py]]
Вам нельзя прикреплять файлы к этой странице.