protected synchronized void calcPositions(V v) { Point2D fvd = this.frVertexData.getUnchecked(v); if(fvd == null) return; Point2D xyd = apply(v); double deltaLength = Math.max(EPSILON, Math.sqrt(fvd.getX()*fvd.getX()+fvd.getY()*fvd.getY())); double newXDisp = fvd.getX() / deltaLength * Math.min(deltaLength, temperature); Preconditions.checkState(!Double.isNaN(newXDisp), "Unexpected mathematical result in FRLayout:calcPositions [xdisp]"); double newYDisp = fvd.getY() / deltaLength * Math.min(deltaLength, temperature); double newX = xyd.getX()+Math.max(-5, Math.min(5,newXDisp)); double newY = xyd.getY()+Math.max(-5, Math.min(5,newYDisp)); newX = Math.max(innerBounds.getMinX(), Math.min(newX, innerBounds.getMaxX())); newY = Math.max(innerBounds.getMinY(), Math.min(newY, innerBounds.getMaxY())); xyd.setLocation(newX, newY); }