for (int a = 0; a < nodes.length; a++) { for (int b = a + 1; b < nodes.length; b++) { Node nodeA = nodes[a]; Node nodeB = nodes[b]; double deltaX = nodeB.getX() - nodeA.getX(); double deltaY = nodeB.getY() - nodeA.getY(); double distanceSquared = deltaX * deltaX + deltaY * deltaY; if (distanceSquared < 0.01) { deltaX = Math.random() / 10 + 0.1; deltaY = Math.random() / 10 + 0.1; distanceSquared = deltaX * deltaX + deltaY * deltaY; } double distance = Math.sqrt(distanceSquared); if (distance < maxRepulsiveForceDistance) { double repulsiveForce = (k * k / distance); nodeB.setFX(nodeB.getFX() + (repulsiveForce * deltaX / distance)); nodeB.setFY(nodeB.getFY() + (repulsiveForce * deltaY / distance)); nodeA.setFX(nodeA.getFX() - (repulsiveForce * deltaX / distance)); nodeA.setFY(nodeA.getFY() - (repulsiveForce * deltaY / distance)); } }