Two circles intersect
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);
    }
}