protected void condenseVertices(List<Row<V>> rows, Map<V, Point2D> newLocations,
			VisualGraphVertexShapeTransformer<V> transformer, double centerX, double centerY) {

		//
		// Note: we move the articulations and vertices closer together on the x-axis.  We do
		//       not move the y-axis, as that is already as close together as we would like at
		//       this point.
		//
		double condenseFactor = getCondenseFactor();
		Collection<Point2D> vertexPoints = newLocations.values();
		for (Point2D point : vertexPoints) {
			double currentX = point.getX();
			double currentY = point.getY();

			// move closer to the center
			double deltaX = centerX - currentX;
			double offsetX = (deltaX * condenseFactor) + currentX;

			point.setLocation(offsetX, currentY);
		}

		//
		// The above aggressive condensing may lead to neighboring node overlapping for
		// nodes in the same row.  Check to see if we need to move the nodes to avoid this case.
		//
		unclip(rows, newLocations, transformer);
	}
Returns a location for the given vertex that is centered within its cell

@param v the vertex
@param col the vertex's column in the grid
@param row the vertex's row in the grid
@param bounds the bounds of the vertex in the layout space
@return the centered location
Ghidra/Framework/Graph/src/main/java/ghidra/graph/viewer/layout/AbstractVisualGraphLayout.java