Прикреплённый файл «bacilly.py»

Загрузка

   1 #!/usr/bin/python
   2 # coding: UTF8
   3 '''
   4 Растущие окружности. На плоскости даны координаты N точек (пар вещественных чисел). Из этих точек как из центров начинают расти окружности с одинаковой скоростью. Когда любые две окружности начинаются касаться, то их рост прекращается и радиусы фиксируются. Через некоторое конечное время рост всех окружностей прекращается. Напечатать N окончательных радиусов окружностей. Кроме всего прочего, нарисовать условие (и результат) задачи в графическом виде.
   5 '''
   6 
   7 import pygame, sys, random
   8 from math import *
   9 
  10 pygame.init()
  11 screen=pygame.display.set_mode((800,600))
  12 sz=50   # Количество точек
  13 
  14 O=screen.get_rect().center
  15 
  16 def r2(M1,M2):
  17     'Квадрат расстояния между точками'
  18     return (M1[0]-M2[0])**2+(M1[1]-M2[1])**2
  19 
  20 def rkey(D):
  21     'Максимально возможный радиус окружносоти в таблице Ddist'
  22     return sqrt(D[2])-Dtab[D[0]]-Dtab[D[1]]
  23 
  24 Dots=zip(random.sample(xrange(5,screen.get_rect().width-5),sz), \
  25          random.sample(xrange(5,screen.get_rect().height-5),sz))
  26 # Радиусы
  27 Dtab=dict([(d,0) for d in Dots])
  28 # Расстояния между точками
  29 Ddist=[(Dots[i],Dots[j],r2(Dots[i],Dots[j])) for i in xrange(sz-1) for j in xrange(i+1,sz)]
  30 
  31 for d in Dots:
  32     pygame.draw.circle(screen, pygame.Color("khaki"),d,1)
  33 
  34 T=0
  35 while T<sz:
  36     M1,M2,l=min(Ddist,key=rkey)
  37     Ddist.remove((M1,M2,l))
  38     if not Dtab[M1]:
  39         if not Dtab[M2]:
  40             Dtab[M1],Dtab[M2]=sqrt(l)/2.,sqrt(l)/2.
  41             T+=2
  42         else:
  43             Dtab[M1]=sqrt(l)-Dtab[M2]
  44             T+=1
  45     elif not Dtab[M2]:
  46         Dtab[M2]=sqrt(l)-Dtab[M1]
  47         T+=1
  48 
  49 for d in Dtab:
  50     pygame.draw.circle(screen, pygame.Color("green"),d,int(Dtab[d]),min(int(Dtab[d]),2))
  51 
  52 while True:
  53     event = pygame.event.wait()
  54     if   event.type == pygame.QUIT: sys.exit()
  55     elif event.type == pygame.KEYUP:
  56         if event.key == 27: sys.exit()
  57     pygame.display.flip()

Прикреплённые файлы

Для ссылки на прикреплённый файл в тексте страницы напишите attachment:имяфайла, как показано ниже в списке файлов. Не используйте URL из ссылки «[получить]», так как он чисто внутренний и может измениться.

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