Чтобы проверить, перекрываются ли два круга, вы можете сделать:
var radius=circle1.Radius+circle2.Radius;
var deltaX=circle1.CenterX-circle2.CenterX;
var deltaY=circle1.CenterY-circle2.CenterY;
return deltaX*deltaX + deltaY*deltaY <= radius*radius;
Обратите внимание, что я вычисляю расстояние между центрами, а не верхними левыми углами.Я также сравниваю с квадратом радиуса, поэтому мне не нужно использовать дорогую функцию Math.Sqrt
, но это не влияет на правильность.
Ваш код не работает, потому что вы используете Left
и Top
вместо положения центра.Разница между верхними левыми углами такая же, как разница между центрами, если радиус одинаков.Это объясняет, почему ваш код работает только в этом особом случае.
Не уверен, почему вы используете прямоугольник для представления круга.Вы можете рассчитать центр как centerX = 0.5*(Left+Right)
.Вы также должны добавить проверку, что Width==Height
, иначе вы можете получить эллипс в качестве параметра, и тогда этот алгоритм не будет работать.