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

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