Прикреплённый файл «mnogougGen.py»
Загрузка 1 #!/usr/bin/env python
2 # coding: utf
3 '''
4 Генратор многоугольников
5 '''
6
7 import random, sys
8 from mnogoug import *
9
10 W,H=800,600
11
12 def nevyp(N):
13 Dots=[(rnd100(W),rnd100(H)) for i in xrange(N)]
14 Dots.sort()
15 L,R=[Dots.pop(0)],[Dots.pop()]
16 for d in Dots:
17 if halfplane(L[0],R[0],d)>0:
18 R.insert(1,d)
19 else:
20 L.append(d)
21 return L+R
22
23 def inner(Poly,A):
24 P=set()
25 return [halfplane(B,C,A) for B,C in zip(Poly,Poly[1:]+[Poly[0]])]
26
27 def vyp(N):
28 Dots=[(rnd100(W/2),rnd100(H/2)), (rnd100(W,W/2),rnd100(H/2)), (rnd100(W/2),rnd100(H,H/2))]
29 # В какой полуплоскости относительно стороны лежит многоугольник
30 half=halfplane(*Dots)
31 while len(Dots)<N:
32 D=(rnd100(W),rnd100(H))
33 # Проверим, точно ли точка снаружи
34 I=inner(Dots,D)
35 if 0 in I or len(set(I))==1: continue
36 # Есть ли ровно одна сторона, разделяющая точку и все вершины по разным п/п
37 if I.count(-half)>1: continue
38 # Вставим вершину между концами этой стороны
39 i=I.index(-half)
40 Dots.insert(i+1,D)
41 return Dots
42
43 N,mnog=12,vyp
44 if len(sys.argv)>1:
45 N,mnog=abs(int(sys.argv[1])), int(sys.argv[1])>0 and vyp or nevyp
46 if len(sys.argv)>2:
47 W,H=map(int, sys.argv[2].split(","))
48 print "{0},{1}".format(rnd100(W),rnd100(H))
49 print " ".join(("{0},{1}".format(x,y) for x,y in mnog(N)))
Прикреплённые файлы
Для ссылки на прикреплённый файл в тексте страницы напишите attachment:имяфайла, как показано ниже в списке файлов. Не используйте URL из ссылки «[получить]», так как он чисто внутренний и может измениться.- [получить | показать] (2012-05-23 14:50:29, 0.8 KB) [[attachment:mnogoug.py]]
- [получить | показать] (2012-05-23 14:50:47, 0.9 KB) [[attachment:mnogougG.py]]
- [получить | показать] (2012-05-23 14:59:43, 1.5 KB) [[attachment:mnogougGen.py]]
- [получить | показать] (2012-05-23 14:50:36, 0.8 KB) [[attachment:mnogougN.py]]
- [получить | показать] (2012-05-23 14:50:41, 0.9 KB) [[attachment:mnogougV.py]]
Вам нельзя прикреплять файлы к этой странице.