2012-06-14 3 views
0

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

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

Обновление: Это сделало трюк.

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); 
+0

Если вы знаете центр и радиус круга, почему бы просто не создать точки в его многоугольном представлении напрямую? Я не думаю, что вам нужен алгоритм окружности. Может, я пропустил что-то очевидное? –

+0

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

ответ

2

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

+0

Это работает. Я считаю, что алгоритм растеризации может быть действительно изменен, чтобы получить сортировку сразу. Однако это решение достаточно хорошо. Благодаря :) – l33t