Прикреплённый файл «2013-02-08.drawgraph-dumb.py»
Загрузка 1 #!/usr/bin/env python
2 # coding: utf
3 '''
4 Рисование произвольного графа.
5 Это, вообще говоря, страшно сложная задача.
6 Поэтому потерпим такой внешний вид, какой получится :)
7
8 Граф вводится в виде списка вершин.
9 '''
10
11 import turtle
12 from math import *
13
14 def line(M1,M2):
15 '''Нарисовать стрелку из M1 в M2'''
16 turtle.up()
17 turtle.goto(*M1)
18 turtle.down()
19 turtle.goto(*M2)
20
21 def arrow(M1,M2):
22 '''Нарисовать стрелку из M1 в M2'''
23 line(M1,M2)
24 w=turtle.distance(M1)
25 # Тупой вариант стрелки.
26 # Правильнее было бы определить угол и нарисовать две линии
27 for i in xrange(1,20):
28 turtle.width(i/2)
29 x=M2[0]-(M2[0]-M1[0])*i/w
30 y=M2[1]-(M2[1]-M1[1])*i/w
31 turtle.goto(x,y)
32 turtle.width(1)
33
34 def coord(n,addx=10,addy=10):
35 '''Выдать координату вершины n'''
36 W,H=turtle.screensize()
37 W-=2*addx
38 H-=2*addy
39 # Это плохие, негодные координаты: стрелки сливаются
40 return addx+n%(Raw+1)*W/Raw-W/2, addy+n/(Raw+1)*H/(Raw-1)-H/2
41
42 def drawpeaks(peaks):
43 turtle.up()
44 turtle.pencolor("red")
45 for p in peaks:
46 turtle.goto(coord(p))
47 turtle.write(str(p),font=("Arial",12,"normal"))
48
49 def drawgraph(Graph, fun=line):
50 for a,b in Graph:
51 fun(coord(a),coord(b))
52
53 turtle.setup(width=0.80, height=0.80)
54 turtle.screensize(turtle.window_width()*0.9,turtle.window_height()*0.9)
55
56 Graph=input()
57 ins=set((l[0] for l in Graph))
58 outs=set((l[1] for l in Graph))
59 peaks=ins|outs
60 N=max(peaks)
61 Raw=int(sqrt(N))
62 print turtle.screensize(),N,Raw,Raw*(Raw+1)
63
64 turtle.tracer(0)
65 turtle.hideturtle()
66 drawgraph(Graph, arrow)
67 drawpeaks(peaks)
68
69 turtle.mainloop()
Прикреплённые файлы
Для ссылки на прикреплённый файл в тексте страницы напишите attachment:имяфайла, как показано ниже в списке файлов. Не используйте URL из ссылки «[получить]», так как он чисто внутренний и может измениться.- [получить | показать] (2013-02-15 15:23:11, 1.9 KB) [[attachment:2013-02-08.drawgraph-dumb.py]]
- [получить | показать] (2013-02-15 15:22:48, 8.8 KB) [[attachment:2013-02-08.graph-gen.py]]
- [получить | показать] (2013-02-15 15:22:25, 1.2 KB) [[attachment:2013-02-08.printtree.py]]
Вам нельзя прикреплять файлы к этой странице.