Один наивный подход может заключаться в том, чтобы найти ограничивающую рамку для круга.
Поскольку у вас уже есть все точки в списке, вы можете найти верхнюю, нижнюю, левую и правую.
Предполагая, что (0,0) - это верхний левый угол системы координат:
- Вверху - точка с минимальным Y.
- Внизу - точкас максимальным Y.
- Слева - точка с минимальным X.
- Справа - точка с максимальным X.
Центр ограничивающего прямоугольникацентр круга.Точно так же ширина / высота ограничительной рамки равна ее диаметру.
Редактировать: альтернативное решение
Найти среднее значение всех точек в окружности.Это даст вам центр круга.
var aggregate = points.Aggregate((point, result) => new Point{ X = point.X + result.X, Y = point.Y + result.Y });
var center = new Point { X = aggregate.X / points.Count, Y = aggregate.Y / points.Count };
Это может быть более оптимальным решением, поскольку это можно сделать, пока вы сканируете изображение на наличие черных пикселей.Вместо того, чтобы найти черные пиксели и затем использовать LINQ.