public final void computeRadiusIncremental(Morph newMorph, boolean addition) {
		if (morphsById.size() == 1) {
			radius = 16; // FIXME put that morph radius into the Morph class
		}

		if (addition) {
			float distance = 0;
			for (Morph m : morphsById.values()) {
				distance = newMorph.getPosInShip().distance(m.getPosInShip());
				if (distance > (radius - 16) * 2) {
					radius = distance / 2 + 16;
					center = new Vect3D();
					center.add(newMorph.getPosInShip());
					center.add(m.getPosInShip());
					center.normalize(center.modulus() / 2);
				}
			}
		} else {
			List<Long> morphIds = new ArrayList<Long>(morphsById.keySet());
			float distance = 0;
			radius = 0;

			for (int i = 0; i < morphIds.size(); i++) {
				Morph refMorph = morphsById.get(morphIds.get(i));
				for (int j = i; j < morphIds.size(); j++) {
					Morph m = morphsById.get(morphIds.get(j));
					distance = refMorph.getPosInShip().distance(m.getPosInShip());
					if (distance > (radius - 16) * 2) {
						radius = distance / 2 + 16;
						center = new Vect3D();
						center.add(refMorph.getPosInShip());
						center.add(m.getPosInShip());
						center.normalize(center.modulus() / 2);
					}
				}
			}
		}
	}