在abaqus中的随机生成二位颗粒python算法中如何实现每个颗粒的半径在指定范围内随机?
import numpy as np
import random
xmin=0.0
xmax=20.0
ymin=0.0
ymax=20.0
r=random.uniform(1.5,3)
beta=0.30
Sph=[]
Sum=0
while True:
flag = True
if Sum>=xmax*ymax*beta:
print('Bones Area is %f mm^2' %Sum)
print('Total Area is %f mm^2' %(xmax*ymax))
print('Bones Area is %f%% of Total Area' %(100*Sum/xmax/ymax))
break
x=random.uniform(xmin,xmax)
y=random.uniform(ymin,ymax)
if ((x- r>xmin and x+r<xmax) and (y- r>ymin and y+r<ymax)):
if not Sph:
Sph.append([x,y,r])
Sum = Sum + np.pi*(r-0.1)**2
continue
else:
for s in Sph:
D=np.sqrt((s[0]- x)**2+(s[1]- y)**2)
if D<s[2]+r:
flag = False
break
if flag==True:
Sph.append([x,y,r])
Sum = Sum + np.pi*(r-0.1)**2
a=[x[0] for x in Sph]
b=[x[1] for x in Sph]
print(a)
print('========')
print(b)
for index,item in enumerate(Sph):
s1.CircleByCenterPerimeter(center=(item[0], item[1]), point1=(item[0], item[1]+item[2]))
ii = int(2*index+6)
s1.offset(distance=0.1, objectList=(g[ii], ), side=LEFT)
p = mdb.models['Model-1'].parts['Part-1']
f = p.faces
pickedFaces = f.getSequenceFromMask(mask=('[#1 ]', ), )
e1, d2 = p.edges, p.datums
p.PartitionFaceBySketch(faces=pickedFaces, sketch=s1)
s1.unsetPrimaryObject()
del mdb.models['Model-1'].sketches['__profile__']