Two circles intersect Do two circles in a 2D plane disjoint?

$$(r_1 + r_2) \cdot (r_1 + r_2) \gt \Delta{X} \cdot \Delta{X} + \Delta{Y} \cdot \Delta{Y}$$

Any comments / corrections on this code?

internal struct HoleInfo
{
    public float Diameter { get; internal set; }
    public float X { get; internal set; }
    public float Y { get; internal set; }
    public HoleInfo(float x, float y, float diameter)
    {
        X = x;
        Y = y;
        Diameter = diameter;
    }
}
static bool HoleOverlap(HoleInfo hole1, HoleInfo hole2)
{
    float holeSize = (hole1.Diameter + hole2.Diameter) / 2;
    float deltaX = hole1.X - hole2.X;
    float deltaY = hole1.Y - hole2.Y;
    return (holeSize * holeSize &gt; deltaX * deltaX + deltaY * deltaY);
}


It is called HoleInfo because the app is concerned if holes drilled in a board will overlap.
You're breaking some rules for good struct design - see them here.

X DO NOT define mutable value types.
✓ DO implement IEquatable on value types.

I'm going to disagree with everyone else and say that calling your struct a Hole is fine as it's a domain specific concept.
I think your method naturally belongs on the type itself. I'd call it Intersects to avoid the disjoint/overlap debate.
// using static System.Math; // Easy access to Pow.

public struct Hole : IEquatable&lt;Hole&gt;
{
    public float Radius =&gt; Diameter / 2;
    public float Diameter { get; }
    public float X { get; }
    public float Y { get; }

    public Hole(float x, float y, float diameter)
    {
        X = x;
        Y = y;
        Diameter = diameter;
    }

    public bool Intersects(Hole other)
    {
        var sumR = Radius + other.Radius;
        var deltaX = X - other.X;
        var deltaY = Y - other.Y;
        return Pow(sumR, 2) &gt; Pow(deltaX, 2) + Pow(deltaY, 2);
    }

    public bool Equals(Hole other)
    {
        return Diameter.Equals(other.Diameter) &amp;&amp; X.Equals(other.X) &amp;&amp; Y.Equals(other.Y);
    }

    public override bool Equals(object obj)
    {
        if (ReferenceEquals(null, obj)) return false;
        return obj is Hole &amp;&amp; Equals((Hole)obj);
    }

    public override int GetHashCode()
    {
        unchecked
        {
            var hashCode = Diameter.GetHashCode();
            hashCode = (hashCode * 397) ^ X.GetHashCode();
            hashCode = (hashCode * 397) ^ Y.GetHashCode();
            return hashCode;
        }
    }

    public static bool operator ==(Hole left, Hole right)
    {
        return left.Equals(right);
    }

    public static bool operator !=(Hole left, Hole right)
    {
        return !left.Equals(right);
    }
}