Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import pygame, sys
- import random
- import math
- import datetime
- p = 10
- o=p/100
- pygame.init()
- width=640
- height=640
- pygame.display.set_caption('2D-модель роста кристаллов')
- screen = pygame.display.set_mode([width,height])
- screen.fill([255,255,255])
- x = width//2
- y = height//2
- pygame.draw.rect(screen, (255,0,0), ((x,y),(1,1)), 0)
- pygame.display.flip()
- '''des=0
- while des<10:
- x = random.uniform(0,640)
- y = random.uniform(0,640)
- pygame.draw.rect(screen, (255,0,0), ((x,y),(1,1)), 0)
- pygame.display.flip()
- des=des+1'''
- x = width//2
- y = height//2
- radius=100 # радиус основной окружности
- j=0
- r=0
- f=0
- Pi=3.14
- red=0
- black=0
- blue=0
- Violet=0
- pink=0
- parametr=1 #меняет радиус окружности, на которой появляются доп. кластеры
- # отрисовка доп. кластеров
- phi=random.uniform(0,2*Pi)
- xo = x+round(radius/parametr*(math.cos(phi)))
- yo = y+round(radius/parametr*(math.sin(phi)))
- pygame.draw.rect(screen, (0,0,0), ((xo,yo),(1,1)), 0)
- phi=random.uniform(0,2*Pi)
- xo1 = x+round(radius/parametr*(math.cos(phi)))
- yo1 = y+round(radius/parametr*(math.sin(phi)))
- pygame.draw.rect(screen, (0,0,255), ((xo1,yo1),(1,1)), 0)
- phi=random.uniform(0,2*Pi)
- xo2 = x+round(radius/parametr*(math.cos(phi)))
- yo2 = y+round(radius/parametr*(math.sin(phi)))
- pygame.draw.rect(screen, (25,25,112), ((xo2,yo2),(1,1)), 0)
- phi=random.uniform(0,2*Pi)
- xo3 = x+round(radius/parametr*(math.cos(phi)))
- yo3 = y+round(radius/parametr*(math.sin(phi)))
- pygame.draw.rect(screen, (255,20,147), ((xo3,yo3),(1,1)), 0)
- pygame.draw.circle(screen, [67,232,12], [x,y], radius, 1)
- pygame.display.flip()
- while f<o:
- # динамический радиус(не используется)
- '''radius=10+round(j/10)'''
- # создание первых координат блуждающей клетки
- dradius=random.uniform(0, radius)
- phi=random.uniform(0,2*Pi)
- x1= x+round(dradius*(math.cos(phi)))
- y1= y+round(dradius*(math.sin(phi)))
- r=0
- while r==0:
- #проверка на попадание в существующий атом
- if ((screen.get_at((x1, y1))[:3]==(255,0,0)) or (screen.get_at((x1, y1))[:3]==(0,0,0)) or
- (screen.get_at((x1, y1))[:3]==(0,0,255)) or (screen.get_at((x1, y1))[:3]==(25,25,112)) or
- (screen.get_at((x1, y1))[:3]==(255,20,147))):
- dradius=random.uniform(0, radius)
- phi=random.uniform(0,2*Pi)
- x1= x+round(dradius*(math.cos(phi)))
- y1= y+round(dradius*(math.sin(phi)))
- else:
- #проверка на наличие соседей
- if ((screen.get_at((x1+1, y1+1))[:3]==(255,0,0)) or (screen.get_at((x1+1, y1))[:3]==(255,0,0)) or
- (screen.get_at((x1+1, y1-1))[:3]==(255,0,0)) or (screen.get_at((x1, y1+1))[:3]==(255,0,0)) or
- (screen.get_at((x1, y1-1))[:3]==(255,0,0)) or (screen.get_at((x1-1, y1+1))[:3]==(255,0,0)) or
- (screen.get_at((x1-1, y1))[:3]==(255,0,0)) or (screen.get_at((x1-1, y1-1))[:3]==(255,0,0)) or
- (screen.get_at((x1+1, y1+1))[:3]==(0,0,0)) or (screen.get_at((x1+1, y1))[:3]==(0,0,0)) or
- (screen.get_at((x1+1, y1-1))[:3]==(0,0,0)) or (screen.get_at((x1, y1+1))[:3]==(0,0,0)) or
- (screen.get_at((x1, y1-1))[:3]==(0,0,0)) or (screen.get_at((x1-1, y1+1))[:3]==(0,0,0)) or
- (screen.get_at((x1-1, y1))[:3]==(0,0,0)) or (screen.get_at((x1-1, y1-1))[:3]==(0,0,0)) or
- (screen.get_at((x1+1, y1+1))[:3]==(0,0,255)) or (screen.get_at((x1+1, y1))[:3]==(0,0,255)) or
- (screen.get_at((x1+1, y1-1))[:3]==(0,0,255)) or (screen.get_at((x1, y1+1))[:3]==(0,0,255)) or
- (screen.get_at((x1, y1-1))[:3]==(0,0,255)) or (screen.get_at((x1-1, y1+1))[:3]==(0,0,255)) or
- (screen.get_at((x1-1, y1))[:3]==(0,0,255)) or (screen.get_at((x1-1, y1-1))[:3]==(0,0,255)) or
- (screen.get_at((x1+1, y1+1))[:3]==(25,25,112)) or (screen.get_at((x1+1, y1))[:3]==(25,25,112)) or
- (screen.get_at((x1+1, y1-1))[:3]==(25,25,112)) or (screen.get_at((x1, y1+1))[:3]==(25,25,112)) or
- (screen.get_at((x1, y1-1))[:3]==(25,25,112)) or (screen.get_at((x1-1, y1+1))[:3]==(25,25,112)) or
- (screen.get_at((x1-1, y1))[:3]==(25,25,112)) or (screen.get_at((x1-1, y1-1))[:3]==(25,25,112)) or
- (screen.get_at((x1+1, y1+1))[:3]==(255,20,147)) or (screen.get_at((x1+1, y1))[:3]==(255,20,147)) or
- (screen.get_at((x1+1, y1-1))[:3]==(255,20,147)) or (screen.get_at((x1, y1+1))[:3]==(255,20,147)) or
- (screen.get_at((x1, y1-1))[:3]==(255,20,147)) or (screen.get_at((x1-1, y1+1))[:3]==(255,20,147)) or
- (screen.get_at((x1-1, y1))[:3]==(255,20,147)) or (screen.get_at((x1-1, y1-1))[:3]==(255,20,147))):
- #выявление к какому именно кластеру присоединился атом
- if ((screen.get_at((x1+1, y1+1))[:3]==(255,0,0)) or (screen.get_at((x1+1, y1))[:3]==(255,0,0)) or
- (screen.get_at((x1+1, y1-1))[:3]==(255,0,0)) or (screen.get_at((x1, y1+1))[:3]==(255,0,0)) or
- (screen.get_at((x1, y1-1))[:3]==(255,0,0)) or (screen.get_at((x1-1, y1+1))[:3]==(255,0,0)) or
- (screen.get_at((x1-1, y1))[:3]==(255,0,0)) or (screen.get_at((x1-1, y1-1))[:3]==(255,0,0))):
- pygame.draw.rect(screen, (255,0,0), ((x1,y1),(1,1)), 0)
- pygame.display.flip()
- red=+1
- if ((screen.get_at((x1+1, y1+1))[:3]==(0,0,0)) or (screen.get_at((x1+1, y1))[:3]==(0,0,0)) or
- (screen.get_at((x1+1, y1-1))[:3]==(0,0,0)) or (screen.get_at((x1, y1+1))[:3]==(0,0,0)) or
- (screen.get_at((x1, y1-1))[:3]==(0,0,0)) or (screen.get_at((x1-1, y1+1))[:3]==(0,0,0)) or
- (screen.get_at((x1-1, y1))[:3]==(0,0,0)) or (screen.get_at((x1-1, y1-1))[:3]==(0,0,0))):
- pygame.draw.rect(screen, (0,0,0), ((x1,y1),(1,1)), 0)
- pygame.display.flip()
- black=+1
- if ((screen.get_at((x1+1, y1+1))[:3]==(0,0,255)) or (screen.get_at((x1+1, y1))[:3]==(0,0,255)) or
- (screen.get_at((x1+1, y1-1))[:3]==(0,0,255)) or (screen.get_at((x1, y1+1))[:3]==(0,0,255)) or
- (screen.get_at((x1, y1-1))[:3]==(0,0,255)) or (screen.get_at((x1-1, y1+1))[:3]==(0,0,255)) or
- (screen.get_at((x1-1, y1))[:3]==(0,0,255)) or (screen.get_at((x1-1, y1-1))[:3]==(0,0,255))):
- pygame.draw.rect(screen, (0,0,255), ((x1,y1),(1,1)), 0)
- pygame.display.flip()
- blue=+1
- if ((screen.get_at((x1+1, y1+1))[:3]==(25,25,112)) or (screen.get_at((x1+1, y1))[:3]==(25,25,112)) or
- (screen.get_at((x1+1, y1-1))[:3]==(25,25,112)) or (screen.get_at((x1, y1+1))[:3]==(25,25,112)) or
- (screen.get_at((x1, y1-1))[:3]==(25,25,112)) or (screen.get_at((x1-1, y1+1))[:3]==(25,25,112)) or
- (screen.get_at((x1-1, y1))[:3]==(25,25,112)) or (screen.get_at((x1-1, y1-1))[:3]==(25,25,112))):
- pygame.draw.rect(screen, (25,25,112), ((x1,y1),(1,1)), 0)
- pygame.display.flip()
- Violet=+1
- if ((screen.get_at((x1+1, y1+1))[:3]==(255,20,147)) or (screen.get_at((x1+1, y1))[:3]==(255,20,147)) or
- (screen.get_at((x1+1, y1-1))[:3]==(255,20,147)) or (screen.get_at((x1, y1+1))[:3]==(255,20,147)) or
- (screen.get_at((x1, y1-1))[:3]==(255,20,147)) or (screen.get_at((x1-1, y1+1))[:3]==(255,20,147)) or
- (screen.get_at((x1-1, y1))[:3]==(255,20,147)) or (screen.get_at((x1-1, y1-1))[:3]==(255,20,147))):
- pygame.draw.rect(screen, (255,20,147), ((x1,y1),(1,1)), 0)
- pygame.display.flip()
- pink=+1
- r=1
- j=+1
- # подсчёт процентного содержания атомов в окружности
- f=j/round(Pi*radius*radius)
- # вывод времени и кол-ва атомов кластеров(не используется)
- '''now = datetime.datetime.now()
- print(j,';',(now.minute*60+now.second))'''
- else:
- #проверка на выход за окружность
- if ((x1>100) or (x1<0) or (y1>100) or (y1<0)):
- dradius=random.uniform(0, radius)
- phi=random.uniform(0,2*Pi)
- x1= x+round(dradius*(math.cos(phi)))
- y1= y+round(dradius*(math.sin(phi)))
- else:
- #шаг блуждающего атома
- x1= random.randint(x1-1,x1+1)
- y1= random.randint(y1-1,y1+1)
- print('red= ', red)
- print('black= ', black)
- print('blue= ', blue)
- print('Violet= ', Violet)
- print('pink= ', pink)
- running = True
- while running:
- for event in pygame.event.get():
- if event.type == pygame.QUIT:
- running = False
- pygame.quit()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement