import rhinoscriptsyntax as rs import Rhino import Rhino.Geometry as rg import random as rnd import scriptcontext as sc class Agents: def __init__(self): self.p = rg.Point3d(rnd.uniform(-100,100),rnd.uniform(-100,100),0) self.v = rs.VectorUnitize(rs.VectorCreate(targetPt,self.p)) def update(self): self.detect() self.p = self.p + self.v if self.p.X > 100: self.p.X = rnd.uniform(-100,100) self.p.Y = rnd.uniform(-100,100) elif self.p.X < -100: self.p.X = rnd.uniform(-100,100) self.p.Y = rnd.uniform(-100,100) elif self.p.Y > 100: self.p.X = rnd.uniform(-100,100) self.p.Y = rnd.uniform(-100,100) elif self.p.Y < -100: self.p.X = rnd.uniform(-100,100) self.p.Y = rnd.uniform(-100,100) if rs.VectorLength(self.v) > 1.5: self.v = rs.VectorUnitize(self.v)/2 self.v = self.v + rs.VectorUnitize(rs.VectorCreate(targetPt,self.p))/3 def detect(self): for i in pts: if rs.Distance(i.p,self.p) > 0: if rs.Distance(i.p,self.p) < 20: self.v = self.v + rs.VectorUnitize(rs.VectorCreate(self.p,i.p)) if reset: setup() def setup(): global pts global targetPt pts = [] targetPt = rg.Point3d(0,0,0) numOfPts = 30 for i in range(numOfPts): pts.append(Agents()) glbCenterPts = [] glbPtsVelocity = [] for pt in pts: pt.update() glbCenterPts.append(pt.p) glbPtsVelocity.append(pt.v) a = glbCenterPts b = glbPtsVelocity