粒子同士の接触判定
円形同士の接触の場合は判定がとっても簡単で、粒子間距離がそれぞれの粒子の半径を 足した値より小さければ、接触していると判定できます。
接触していない: L > r1 + r2接触している: L ≦ r1 + r2
- class DEM:
-
- def _particles_collision(self):
- for i in range(self.par_count):
- for j in range(i+1,self.par_count):
- p1 = self.particles[i]
- p2 = self.particles[j]
- lx = p1.x - p2.x
- ly = p1.y - p2.y
- ld = (lx**2+ly**2)**0.5
- if (p1.r+p2.r)>ld: #接触
- cos_a = lx/ld
- sin_a = ly/ld
- self._force_par2par(p1,p2,cos_a,sin_a)
- else:
- p1.en[p2.n] = 0.0
- p1.es[p2.n] = 0.0