Код: Выделить всё
public static bool Overlaps(in Circle circle1, in float annulus1, in Circle circle2, in float annulus2)
{
double h1 = annulus1 * 0.5f;
double h2 = annulus2 * 0.5f;
var innerRadius1 = circle1.Radius - h1;
var outerRadius1 = circle1.Radius + h1;
var innerRadius2 = circle2.Radius - h2;
var outerRadius2 = circle2.Radius + h2;
var d = math.distance(circle1.Origin, circle2.Origin);
return d < outerRadius1 + outerRadius2 && d > innerRadius1 - outerRadius2 && d > innerRadius2 - outerRadius1;
}

Однако проблема заключается в очень больших кругах, например, они не обнаруживают перекрытия:
[img]https://i.sstatic. сеть/AJJ4QRS8.png[/img]
Этот элемент отображается зеленым цветом, что указывает на отсутствие перекрытия. Входные данные:
Код: Выделить всё
Circle 1:
Origin: (2502,3.09)
Radius: 2500
Annulus: 1
Circle 2:
Origin: (6.33,2.39)
Radius: 2.43
Annulus: 1
Как сделать это более стабильным? Я попробовал использовать double, но мне все равно не удалось правильно обнаружить перекрытие.
Подробнее здесь: https://stackoverflow.com/questions/793 ... rcle-radii