Сохранить круг, сгенерированный Брезенхэмом, как многоугольник?

Я создаю круги, используя алгоритм окружности средней точки. Я не хочу рисовать эти круги. Вместо этого я хочу сохранить их как полигоны. Очевидно, что координаты расположены в неправильном порядке, поэтому, если бы я нарисовал эти круги, используя, например, Graphics.DrawPolygon круг превратился бы в сетку из линий.

Вопрос. Как изменить алгоритм для создания правильно определенного многоугольника? Или как я могу создать действительный многоугольник из набора точек (в данном случае принадлежащих кругу)?

Обновление: это помогло.

var firstHalf = points.Where(p => p.Y >= cy).OrderBy(p => p.X);
var secondHalf = points.Where(p => p.Y < cy).OrderByDescending(p => p.X);

var polygon = new List<Point>();
polygon.AddRange(firstHalf);
polygon.AddRange(secondHalf);

person l33t    schedule 14.06.2012    source источник
comment
Это, безусловно, сработает, но мне нужна 100% точность пикселей для этих кругов. Следовательно, алгоритм средней точки - это путь.   -  person l33t    schedule 14.06.2012


Ответы (1)


Для круга должно быть достаточно отсортировать две половины, например. сортировать по x выше y_mid по возрастанию и ниже y_mid по убыванию. Вместе эти точки должны находиться рядом с вашим полигоном.

person Stefan    schedule 14.06.2012
comment
Это работает. Я считаю, что алгоритм растеризации действительно можно изменить, чтобы сортировка выполнялась сразу. Тем не менее, это решение достаточно хорошее. Спасибо :) - person l33t; 14.06.2012