Прикреплённый файл «celyetoch.py»
Загрузка 1 #!/usr/bin/python
2 # coding: UTF8
3 '''
4 Многоугольник (не обязательно выпуклый) на плоскости задан координатами своих вершин. Требуется подсчитать количество точек с целочисленными координатами, лежащих внутри него (но не на его границе).
5 '''
6
7 import pygame, sys
8 from celyetochG import *
9
10 pygame.init()
11 screen=pygame.display.set_mode((640,480))
12
13 O=screen.get_rect().center
14
15 Poly=polygen(20,screen.get_rect().width-10,screen.get_rect().height-10)
16 pygame.draw.lines(screen, pygame.Color("khaki"), True, Poly)
17
18 def checkin(M,P):
19 '''Сумма углов из точки M ко всем вершинам многоугольника P'''
20 return sum([angle(M,P[i],P[i+1]) for i in range(-1,len(P)-1)])
21
22 minX=min([p[0] for p in Poly])
23 minY=min([p[1] for p in Poly])
24 maxX=max([p[0] for p in Poly])
25 maxY=max([p[1] for p in Poly])
26
27 N=0
28 for x in xrange(minX+1,maxX):
29 pygame.display.flip()
30 for y in xrange(minY+1,maxY):
31 if checkin((x,y),Poly) > 1: # должно быть либо 0, либо 2*pi
32 N+=1
33 screen.fill(pygame.Color("midnightblue"),(x,y,1,1))
34 print N
35 # демонстрация
36 back=screen.copy()
37 while True:
38 event = pygame.event.wait()
39 if event.type == pygame.QUIT: sys.exit()
40 elif event.type == pygame.KEYUP:
41 if event.key == 27: sys.exit()
42 elif event.type == pygame.MOUSEMOTION:
43 screen.blit(back,(0,0))
44 a=checkin(event.pos,Poly)
45 pygame.draw.circle(screen,pygame.Color(a < 1 and "green" or "red"),event.pos,2)
46 pygame.display.flip()
Прикреплённые файлы
Для ссылки на прикреплённый файл в тексте страницы напишите attachment:имяфайла, как показано ниже в списке файлов. Не используйте URL из ссылки «[получить]», так как он чисто внутренний и может измениться.- [получить | показать] (2011-09-26 11:35:37, 1.7 KB) [[attachment:celyetoch.py]]
- [получить | показать] (2011-09-26 11:35:37, 3.6 KB) [[attachment:celyetochG.py]]
Вам нельзя прикреплять файлы к этой странице.