public void calcRepulsion() {
		for (int i = 0; i < vertexArray.length; i++) {
			for (int j = i; j < vertexArray.length; j++) {
				if (progress.isStopped())
					return;

				if (j != i) {
					double xDelta = cellLocation[i][0] - cellLocation[j][0];
					double yDelta = cellLocation[i][1] - cellLocation[j][1];
					
					if (xDelta == 0)
					{
						xDelta = 0.01 + Math.random();
					}

					if (yDelta == 0)
					{
						yDelta = 0.01 + Math.random();
					}
					
					// Distance between nodes
					double deltaLength = Math.sqrt((xDelta * xDelta)
							+ (yDelta * yDelta));

					double deltaLengthWithRadius = deltaLength - radius[i]
							- radius[j];
					if (deltaLengthWithRadius < minDistanceLimit)
						deltaLengthWithRadius = minDistanceLimit;

					double force = forceConstantSquared / deltaLengthWithRadius;

					double displacementX = (xDelta / deltaLength) * force;
					double displacementY = (yDelta / deltaLength) * force;
					if (isMoveable[i]) {
						dispX[i] += displacementX;
						dispY[i] += displacementY;
					}

					if (isMoveable[j]) {
						dispX[j] -= displacementX;
						dispY[j] -= displacementY;
					}
				}
			}
		}
	}