![]() |
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]() ![]() ![]() |
|
MAXIQ |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 92 Регистрация: 30.12.2006 Репутация: нет Всего: нет |
Здравствуйте, помогите разобраться с рисованием, а точнее с обращением к пикселам окружности (В примере дла простоты пользуемся SetPixel()). Дело в том, что нужно заполнить круг, но сделать это нужно пошагово, уменьшая радиус добраться до центра. Алгоритм Брезенхэма пропускает некоторые пикселы и результат слегка напоминает дуршлаг. Может я его недопонял и код кривой написал, а может сам алгоритм не так уж и хорош. Сталкивался ли кто с подобной проблемой, может идеи какие есть?
|
|||
|
||||
borisbn |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 6 Всего: 135 |
Вот алгоритм из Вики
Сравни. Если же тебе нужно просто закрасить окружность, то проще пройтись по всем пикселам квадрата, описывающего эту окружность, и проверять, если точка внутри окружности, то делать setPixel
-------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
||||
|
|||||
MAXIQ |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 92 Регистрация: 30.12.2006 Репутация: нет Всего: нет |
С алгоритмом из Вики столкнулся сразу же, он то же дырявый. Но его можно доработать:
Не фонтан конечно, за то закрывает весь круг без дырок. Как видно, слабое место у алгоритма - выбор диагональной точки и если добавить дополнительную прорисовку пиксела внутрь окружности (у--), то результат получается более-менее терпимый. Большое спасибо за помощь, тема закрыта |
|||
|
||||
xvr |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 40 Всего: 223 |
Это нормально. Рисуйте по точкам пол-окружности (по вертикали). Вторая половина будет зеркальным отражением первой половины. Вместе с окружностью рисуйте прямые от текущей точки на одной половине до текущей точки на другой |
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Системное программирование и WinAPI" | |
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |