Прикреплённый файл «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 из ссылки «[получить]», так как он чисто внутренний и может измениться.- [получить | показать] (2011-09-26 11:35:38, 2.3 KB) [[attachment:bacilly.py]]
- [получить | показать] (2011-09-26 11:35:38, 0.4 KB) [[attachment:draw_circles.py]]
- [получить | показать] (2011-09-26 11:35:38, 1.9 KB) [[attachment:drles.py]]
- [получить | показать] (2011-09-26 11:35:38, 1.2 KB) [[attachment:drlesF.py]]
- [получить | показать] (2011-09-26 11:35:38, 0.3 KB) [[attachment:drlesG.py]]
- [получить | показать] (2011-09-26 11:35:38, 1.8 KB) [[attachment:growing_circles.py]]
Вам нельзя прикреплять файлы к этой странице.