public void InitializeParticleVelocities() { foreach (Particle particle in particles) { Rigidbody rb = particle.gameObject.GetComponent <Rigidbody>(); float randX; float randY; float randZ; SwarmUtil.GetRandomXYZ(out randX, out randY, out randZ); rb.AddForce(new Vector3(randX, randY, randZ).normalized *particleSpeed); } foreach (Particle optima in optimaList) { Rigidbody rb = optima.gameObject.GetComponent <Rigidbody>(); float randX; float randY; float randZ; SwarmUtil.GetRandomXYZ(out randX, out randY, out randZ); rb.AddForce(new Vector3(randX, randY, randZ).normalized *optimaSpeed); } }
public void UpdateParticleVelocities() { entropyPercentage = Mathf.Clamp(entropyPercentage, 0, 1); foreach (Particle particle in particles) { Rigidbody rb = particle.gameObject.GetComponent <Rigidbody>(); float randXp, randXg; float randYp, randYg; float randZp, randZg; SwarmUtil.GetRandomUnitSphereXYZ(out randXp, out randYp, out randZp, entropyPercentage); SwarmUtil.GetRandomUnitSphereXYZ(out randXg, out randYg, out randZg, entropyPercentage); float XpMotive = randXp * (particle.bestPosition.x - rb.position.x); float XgMotive = randXg * (globalBestPosition.x - rb.position.x); float YpMotive = randYp * (particle.bestPosition.y - rb.position.y); float YgMotive = randYg * (globalBestPosition.y - rb.position.y); float ZpMotive = randZp * (particle.bestPosition.z - rb.position.z); float ZgMotive = randZg * (globalBestPosition.z - rb.position.z); float X = personalBestInfluence * XpMotive + globalBestInfluence * XgMotive; float Y = personalBestInfluence * YpMotive + globalBestInfluence * YgMotive; float Z = personalBestInfluence * ZpMotive + globalBestInfluence * ZgMotive; //Vector3 influence = new Vector3(X * particleSpeed, Y * particleSpeed, Z * particleSpeed); rb.AddForce(new Vector3(X, Y, Z).normalized *particleSpeed); } foreach (Particle optima in optimaList) { Rigidbody rb = optima.gameObject.GetComponent <Rigidbody>(); float randX; float randY; float randZ; SwarmUtil.GetRandomXYZ(out randX, out randY, out randZ); rb.AddForce(new Vector3(randX, randY, randZ).normalized *optimaSpeed); } }