Прикреплённый файл «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 из ссылки «[получить]», так как он чисто внутренний и может измениться.

Вам нельзя прикреплять файлы к этой странице.