代码4

2017-01-02  本文已影响0人  xuqiuhao
import random
import matplotlib.pyplot as plt
class clusters:
    def __init__(self,size=100,number=200):
        self.l=size
        self.n=number
        self._fig=[[0]*self.l for i in range(self.l)]
    def growth(self):    
        self._fig[int(self.l/2)][int(self.l/2)]=1
        counter=0
        while counter<self.n:
            tempx=random.randint(0,self.l-1)
            tempy=random.randint(0,self.l-1)
            if tempx==0:
                continue
            elif tempx==self.l-1:
                continue
            elif tempy==0:
                continue
            elif tempy==self.l-1:
                continue
            self._fig[tempx][tempy]=1
            if self._fig[tempx-1][tempy]==1:
                continue
            elif self._fig[tempx+1][tempy]==1:
                continue
            elif self._fig[tempx][tempy-1]==1:
                continue
            elif self._fig[tempx][tempy+1]==1:
                continue
            while(1):
                self._fig[tempx][tempy]=0
                temp=random.random()
                if temp<0.25:
                    tempx-=1
                elif 0.25<temp<0.5:
                    tempy-=1
                elif 0.5<temp<0.75:
                    tempx+=1
                elif temp>0.75:
                    tempy+=1
                self._fig[tempx][tempy]=1
                
                if tempx==0:
                    self._fig[tempx][tempy]=0
                    break
                elif tempx==self.l-1:
                    self._fig[tempx][tempy]=0
                    break
                elif tempy==0:
                    self._fig[tempx][tempy]=0
                    break
                elif tempy==self.l-1:
                    self._fig[tempx][tempy]=0
                    break
                
                if self._fig[tempx-1][tempy]==1:
                    counter+=1
                    break
                elif self._fig[tempx+1][tempy]==1:
                    counter+=1
                    break
                elif self._fig[tempx][tempy-1]==1:
                    counter+=1
                    break
                elif self._fig[tempx][tempy+1]==1:
                    counter+=1
                    break
    def show(self):
        for i in range(self.l):
            for j in range(self.l):
                if self._fig[i][j]==1:
                    plt.plot(i,j,'b.')
                    plt.xlim(0,self.l)
                    plt.ylim(0,self.l)
        plt.grid(True)
        plt.xlabel('x')
        plt.ylabel('y')
        plt.title('DLA cluster,number of particles=%.f'%self.n)
                
a=clusters()
a.growth()
a.show()
上一篇 下一篇

猜你喜欢

热点阅读