void ParticleObject::add(const Sphere<float>& sphere, const float diameter, const float charge) { const auto bb = sphere.getBoundingBox(); for (auto x = bb.getMinX(); x <= bb.getMaxX(); x+= diameter) { for (auto y = bb.getMinY(); y <= bb.getMaxY(); y += diameter) { for (auto z = bb.getMinZ(); z <= bb.getMaxZ(); z+= diameter) { const Vector3d<float> pos(x, y, z); if (sphere.isInner(pos)) { const auto density = (sphere.getRadius() - sphere.getCenter().getDistance(pos)) * charge; particles.push_back(new Particle(pos, density, diameter * 0.5f)); } } } } sort(); }