I was making a Physics Engine in C++ when I noticed that when I replace:

```
float absDistance = sqrt(vectorDistance.x * vectorDistance.x + vectorDistance.y * vectorDistance.y);
```

With:

```
float absDistance = abs(vectorDistance.x) + abs(vectorDistance.y)
```

Different things happen.

I’m using the library `<cmath>`

I looked at a lot of stack exchanges but I couldn’t find anyone saying they’re different. My question is why are they different and how.

Here’s my code just in case you needed it:

```
for (int i = 0; i < balls.size(); i++)
{
balls[i].acceleration += gravity;
Vec2 vectorDistance = balls[i].position - constraintPosition;
float absDistance = sqrt(vectorDistance.x * vectorDistance.x + vectorDistance.y * vectorDistance.y);
// float absDistance = abs(vectorDistance.x) + abs(vectorDistance.y)
if (absDistance > constraintRadius - balls[i].radius)
{
balls[i].position = constraintPosition + (vectorDistance / absDistance) * (absDistance - balls[i].radius);
}
balls[i].update(dt);
window.draw(balls[i].sprite);
}
```

When I used `abs()`

the collision would be in a diamond shape

But if I use `sqrt(x*x + y*y)`

I get a collision in a circle shape

### >Solution :

Because the first is the Euclidean distance and the other is the Manhattan distance.