Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.51/41: Рейтинг темы: голосов - 41, средняя оценка - 4.51
 Аватар для Kill100
434 / 299 / 82
Регистрация: 11.12.2010
Сообщений: 1,209
.NET 4.x

Простой и построчный алгоритм заполнения многоугольника

04.04.2012, 20:56. Показов 7642. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Простой и Построчный алгоритм заполнения многоугольника с затравкой C#.
Собственно как это чудо сделать плиз помогите есть вот такой код
Простой алгоритм заполнения с затравкой
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
 
        Graphics gr;
////////////////////////////////
        /// <summary>
        /// Функция отображает точку с координатами X,Y
        /// </summary>
        /// <param name="Point_X">Координата OX</param>
        /// <param name="Point_Y">Координата OY</param>
        void Plot(Int32 Point_X, Int32 Point_Y, Brush Br)
        {
            gr.FillRectangle(Br, Point_X, Point_Y, 3, 3);
        }
 
/////////////////////////////
void Zatravka(Xstarts, Ystarts){
           //if (!selected) return;
            Stack<Point> st = new Stack<Point>();
            Point start = new Point(Xstarts, Ystarts);
            st.Push(start);
            while (st.Count != 0)
            {
                Point temp = st.Pop();
                Plot(temp.X, temp.Y, Brushes.Red);
                bool t = Check(temp.X, temp.Y + 1);
                if (Check(temp.X + 1, temp.Y))
                    st.Push(new Point(temp.X + 1, temp.Y));
                if (Check(temp.X, temp.Y + 1))
                    st.Push(new Point(temp.X, temp.Y + 1));
                if (Check(temp.X - 1, temp.Y))
                    st.Push(new Point(temp.X - 1, temp.Y));
                if (Check(temp.X, temp.Y - 1))
                    st.Push(new Point(temp.X, temp.Y - 1));
            }
}
И есть функция Check которая пои идее должна проверять соседние пикселы но как у графика Graphics gr; получить пиксел и как его проверить на
Пиксел(x,y+1)<>Цвет_закраски and Пиксел(x,y+1)<>Цвет_границы
я не знаю

PS если у кого ни будь осталось скиньте плз замучился уже с этой комп графикой
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
04.04.2012, 20:56
Ответы с готовыми решениями:

Алгоритм построчного заполнения многоугольника с использованием затравочного пикселя
почему у меня не работает программа? #include #pragma hdrstop #include &quot;windows.h&quot; #include &quot;Unit1.h&quot;...

Алгоритм построчного заполнения многоугольника с использованием затравочного пикселя
проверьти работает ли программа или в чем ошибка? unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes,...

Алгоритм построчного заполнения многоугольника с использованием затравочного пикселя
Задание: 1. Методом построчного заполнения с затравкой закрасить произвольно задаваемую область, состоящую из ломаных. Показать...

4
25 / 25 / 7
Регистрация: 03.06.2010
Сообщений: 76
04.04.2012, 21:36
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
 void Fill(Bitmap bitmap, int x, int y, Color color)
        {
            BitmapData data = bitmap.LockBits(new Rectangle(0, 0, bitmap.Width, bitmap.Height),ImageLockMode.ReadWrite, PixelFormat.Format32bppRgb);
            int[] bits = new int[data.Stride / 4 * data.Height];
            Marshal.Copy(data.Scan0, bits, 0, bits.Length);
            LinkedList<Point> CheckPoint = new LinkedList<Point>();
            int FillTo = color.ToArgb();
            int FillFrom = bits[x + y * data.Stride / 4];
            bits[x + y * data.Stride / 4] = FillTo;
            if (FillFrom != FillTo)
            {
                CheckPoint.AddLast(new Point(x, y));
                while (CheckPoint.Count > 0)
                {
                    Point current = CheckPoint.First.Value;
                    CheckPoint.RemoveFirst();
                    foreach (Point off in new Point[] { new Point(0, -1), new Point(0, 1), new Point(-1, 0), new Point(1, 0)})
                    {
                        Point next = new Point(current.X + off.X, current.Y + off.Y);
                        if (next.X >= 0 && next.Y >= 0 && next.X < data.Width && next.Y < data.Height)
                            if (bits[next.X + next.Y * data.Stride / 4] == FillFrom)
                            {
                                CheckPoint.AddLast(next);
                                bits[next.X + next.Y * data.Stride / 4] = FillTo;
                            }
                    }
                }
            }
            Marshal.Copy(bits, 0, data.Scan0, bits.Length);
            bitmap.UnlockBits(data);
        }
2
 Аватар для Kill100
434 / 299 / 82
Регистрация: 11.12.2010
Сообщений: 1,209
04.04.2012, 21:54  [ТС]
Как я понял это обычный алгоритм а не строчный?
и что за функция Marshal ???? из using System.Runtime.InteropServices;
0
25 / 25 / 7
Регистрация: 03.06.2010
Сообщений: 76
05.04.2012, 14:37
да, простой. описание есть на msdn...
0
2 / 2 / 1
Регистрация: 11.06.2012
Сообщений: 18
29.09.2013, 20:11
Кто-нибудь может объяснить алгоритм Сержа?? Пожалуйста))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
29.09.2013, 20:11
Помогаю со студенческими работами здесь

Простой алгоритм заполнения с затравкой
помогите исправить апшибки, писал функцию по методичке (там псевдокодом это было), че то пока что брякается на первом же пуше void...

Простой частотомер-измеритель коэффициента заполнения и девиации коэффициента заполнения ШИМ на AVR
У кого есть схема и прошивка частотомера-измерителя коэффициента заполнения и девиации коэффициента заполнения ШИМ на AVR ...

Реализовать построчный алгоритм заливки с затравкой
Вот алгоритм Поместить затравочный пиксел в стек Пока стек не пуст Извлечь пиксел из стека Присвоить пикселу требуемое...

Алгоритм закрашивания многоугольника линиями
Доброго времени суток! Интересует пара вопросов по следующему алгоритму: Найти min{yi} и max{yi} среди всех вершин Pi. ...

Алгоритм нахождения вершин многоугольника
Как построить многоугольник с максимальной точностью, если известно: 1.Количество вершин многоугольника 2.Первые две вершины имеют...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru