Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.78/32: Рейтинг темы: голосов - 32, средняя оценка - 4.78
0 / 0 / 0
Регистрация: 19.10.2009
Сообщений: 47

Графический способ рисования кругов

27.05.2011, 21:53. Показов 6186. Ответов 21
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здраствуйте! Помогите решить задачу: Написать программу для рисования узора (см. рисунок). Узор состоит из 50 вложенных окружностей. Использовать несколько (не менее 3) цветов. Я предполагаю, что нужно использовать цикл, или нет?


0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
27.05.2011, 21:53
Ответы с готовыми решениями:

Какой способ рисования в 2D лучше?
Приветствую! Захотел сделать свой контрол, нашел в интеренете аж целых 2 решение моей задачи. З первым вариантом разобрался, второй...

Функция для рисования кругов
Доброго времени суток, необходимо написать метод для рисования кругов (в данном случае 20 кругов со случайным диаметром от 50 до 200 px,...

Класс для рисования кругов
Класс для рисования кругов (хранить радиус R и координаты x,y центра). Вычислять площадь круга и длину окружности.

21
 Аватар для probit
70 / 63 / 1
Регистрация: 25.04.2011
Сообщений: 181
27.05.2011, 22:38
Вот программка, у меня работает. Создал цикл и три цвета меняются с периодичностью, можно добавить и функцию случайных чисел. На форме должен быть пикчербокс (если хочешь рисуй прямо на форме, только измени pictueBox1 на Form1).
VB.NET
1
2
3
4
5
6
7
8
9
10
11
  Dim r As Graphics = PictureBox1.CreateGraphics
        For i = 1 To 50
            Select Case i Mod 3
                Case 1
                    r.DrawEllipse(Pens.Black, 150 - i * 2, 125 - i * 2, i * 4, i * 4)
                Case 2
                    r.DrawEllipse(Pens.Cyan, 150 - i * 2, 125 - i * 2, i * 4, i * 4)
                Case 0
                    r.DrawEllipse(Pens.DarkGreen, 150 - i * 2, 125 - i * 2, i * 4, i * 4)
            End Select
        Next
1
0 / 0 / 0
Регистрация: 19.10.2009
Сообщений: 47
27.05.2011, 22:42  [ТС]
Цитата Сообщение от probit Посмотреть сообщение
Select Case i Mod 3
можно поподробнее , что обозначает это?
0
 Аватар для probit
70 / 63 / 1
Регистрация: 25.04.2011
Сообщений: 181
27.05.2011, 23:39
функция mod позволяет найти остаток от деления, например 5 mod 2 выдаст 1, 6 mod 3 выдаст 0, а 2 mod 10 выдаст 2, чтобы чередовать цвета я взял за основу эту функцию, для трёх цветов значение функции mod чередуется при деление параметра i на 3.
Select case это развлетвлённое условие, иначе сказать, такая запись на VB
Visual Basic
1
2
3
4
5
6
7
8
Select case i mod 3
Case 0
событие 1
case 1
событие 2
case 2
событие 3
End select
будет читаться по-русски так: если остаток от целочисленного деления параметра i на 3 равен 0 (то есть число i кратно 3), то выполняется событие 1, если остаток от целочисленного деления параметра i на 3 равен 1 , то выполняется событие 2, если остаток от целочисленного деления параметра i на 3 равен 2 , то выполняется событие 3. Структуру Select case нужно так же закрывать, как и условие If.
Ещё можно написать равноценную приведённому примеру структуру if:
Visual Basic
1
2
3
If i mod 3 = 0 then событие 1
If i mod 3 = 1 then событие 2
If i mod 3 = 2 then событие 3
Добавлено через 3 минуты
Ели ещё возникают вопросы почитай тут http://msdn.microsoft.com/ru-r... 7t14y.aspx или http://www.codenet.ru/progr/vb... ctions.php
0
 Аватар для Юпатов Дмитрий
1721 / 1208 / 228
Регистрация: 23.12.2010
Сообщений: 1,544
28.05.2011, 00:26
еще вариант. Рисуем на Bitmap-e который потом можно сохранить на диск
VB.NET
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
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Me.ClientSize = New Size(600, 600)
        Me.MinimumSize = Me.Size
        Dim bmp As Bitmap = New Bitmap(Me.ClientSize.Width, Me.ClientSize.Height)
        Me.BackgroundImage = bmp
        Me.DoubleBuffered = True
        Dim g As Graphics = Graphics.FromImage(bmp)
        g.Clear(Color.Transparent)
        g.SmoothingMode = Drawing2D.SmoothingMode.AntiAlias
        Dim center As Point = New Point(bmp.Width / 2, bmp.Height / 2)
        Dim diameter As Integer = 20
        Dim rf As RectangleF
        Dim pn As Pen
        For i As Integer = 1 To 50
 
            pn = New Pen(Color.FromArgb(Math.Min(i * 6, 255), Math.Min(i * 4, 255), Math.Min(i * 5, 255)), 1)
            With rf
                .Width = diameter
                .Height = diameter
                .Location = New Point(center.X - diameter / 2, center.Y - diameter / 2)
            End With
            g.DrawEllipse(pn, rf)
            diameter = diameter + 10
        Next
        Me.BackgroundImageLayout = ImageLayout.Center
        If MsgBox("Сохранить в " & System.IO.Path.GetPathRoot(My.Application.Info.DirectoryPath) & "sample.png?", MsgBoxStyle.YesNo Or MsgBoxStyle.Question) = MsgBoxResult.Yes Then
            bmp.Save(System.IO.Path.GetPathRoot(My.Application.Info.DirectoryPath) & "sample.png", Drawing.Imaging.ImageFormat.Png)
        End If
    End Sub
2
 Аватар для probit
70 / 63 / 1
Регистрация: 25.04.2011
Сообщений: 181
28.05.2011, 13:32
Юпатов Дмитрий, можешь объяснить как можно добавить битмап сложной формы с прозрачным фоном?
0
 Аватар для Юпатов Дмитрий
1721 / 1208 / 228
Регистрация: 23.12.2010
Сообщений: 1,544
28.05.2011, 15:58
Цитата Сообщение от probit Посмотреть сообщение
как можно добавить битмап сложной формы с прозрачным фоном?
куда добавить? на существующий битмап наложить? метод drawimage смотри
0
 Аватар для probit
70 / 63 / 1
Регистрация: 25.04.2011
Сообщений: 181
28.05.2011, 23:58
Юпатов Дмитрий, нет. Добавить изображение сложной формы, например, на форму, чтобы часть изображения была прозрачной.
0
 Аватар для Юпатов Дмитрий
1721 / 1208 / 228
Регистрация: 23.12.2010
Сообщений: 1,544
29.05.2011, 00:16
ну так в моем примере изображение прозрачное, только окружности есть и все. А весь холст залит транспанентом.
Или что ты имеешь в виду? Опиши точнее, можно с примерами какими-то...

Добавлено через 12 минут
Или вот, не об этом ли речь:
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Me.TransparencyKey = Color.Blue
        Me.ClientSize = New Size(500, 500)
        Dim sz As Size = Me.ClientSize
        Dim bmp As Bitmap = New Bitmap(sz.Width, sz.Height)
        Me.BackgroundImageLayout = ImageLayout.Center
        Me.BackgroundImage = bmp
        Me.MinimumSize = Me.Size
        Me.DoubleBuffered = True
        Dim g As Graphics = Graphics.FromImage(bmp)
        Dim rf As RectangleF = New RectangleF(10, 10, sz.Width - 20, sz.Height - 20)
        g.SmoothingMode = Drawing2D.SmoothingMode.None
        g.Clear(Color.Transparent)
        g.FillEllipse(Brushes.Blue, rf) ' это ключевой момент - заливаем круг тем же цветом, что и у свойства TransparencyKey (задали в начале процедуры)
    End Sub
1
 Аватар для probit
70 / 63 / 1
Регистрация: 25.04.2011
Сообщений: 181
29.05.2011, 12:42
Ну мне нужно, например, нарисовать человека, но чтобы задний фон, был не определённого цвета, а прозрачный, чтобы он двигался, например. Человек нарисован на картинке.
Изображения
 
0
_
2364 / 1243 / 78
Регистрация: 28.10.2009
Сообщений: 4,331
29.05.2011, 13:09
probit, движение рисунка и прозрачность фона никак не связаны. Ты прост вызываешь перерисовку содержимого. За счет этого возникает иллюзия движения - то есть анимация. И тут все равно прозрачный фон или нет.
0
 Аватар для probit
70 / 63 / 1
Регистрация: 25.04.2011
Сообщений: 181
29.05.2011, 14:18
я, сказав про движение, лишь привел пример. Я хочу сказать, что у меня фон со сложным узором, по нему движется (или просто находится на нём) картинка, но нужно, чтобы часть картинки была прозрачная, а часть нет, как мне вырезать часть картинки?
0
Почетный модератор
 Аватар для Памирыч
23251 / 9163 / 1084
Регистрация: 11.04.2010
Сообщений: 11,014
29.05.2011, 14:29
probit, не проще ли изначально грузить правильную картинку (без лишних областей так сказать)?
Или это невозможно по каким-то причинам?
0
 Аватар для probit
70 / 63 / 1
Регистрация: 25.04.2011
Сообщений: 181
29.05.2011, 15:46
Памирыч, есть такие картинки, где лишняя область, которую нужно сделать прозрачной, не является правильной фигурой. Вот пример рисунка и фон, нужно чтобы на фоне была изображена только цветная часть рисунка.Но фон и рисунок нужно размещать на разных пикчербоксах.
Изображения
  
0
 Аватар для Юпатов Дмитрий
1721 / 1208 / 228
Регистрация: 23.12.2010
Сообщений: 1,544
29.05.2011, 15:58
ну так и рисуй. А фон картинки, на котором рисовать будешь, предварительно очисти прозрачным цветом: g.Clear(Color.Transparent) или вообще ничего не трогай, он и так прозрачный будет.
Или тебе надо код написать, который эту морду рисует?
0
Почетный модератор
 Аватар для Памирыч
23251 / 9163 / 1084
Регистрация: 11.04.2010
Сообщений: 11,014
29.05.2011, 16:06
Название: e76vi8ah.png
Просмотров: 259

Размер: 18.3 Кб

Вот если такой сделать рисунок - это то, что нужно?
1
 Аватар для probit
70 / 63 / 1
Регистрация: 25.04.2011
Сообщений: 181
29.05.2011, 16:46
=)у меня есть фон, например на форме. Я добавляю пикчербокс с некоторой картинкой, которую графическими методами не нарисуешь, например собака, лицо человека или ещё что-нибудь.У меня получается такой эффект, как в примере1. Вместо кляксы, представьте любой сложный рисунок. Но мне нужно достигнуть эффекта как в приере2, я не знаю как:наложив на него маску или ещё как-то. Это я и хотел спросить.
Изображения
  
0
 Аватар для probit
70 / 63 / 1
Регистрация: 25.04.2011
Сообщений: 181
29.05.2011, 16:49
Памирыч, без лишних областей грузить нельзя, возможно только сделать маску областей, которые нужно сделать прозрачными.

Добавлено через 53 секунды
Юпатов Дмитрий, я не рисую на пикчербоксе, а добавляю на него изображение, часть которого мне нужно сделать прозрачным.
0
Почетный модератор
 Аватар для Памирыч
23251 / 9163 / 1084
Регистрация: 11.04.2010
Сообщений: 11,014
29.05.2011, 16:51
probit, Скопируй на комп картинку, что я выложил и вставь как ты это делаешь - это ПНГ-формат, вместо своей. Я для этого ее и выложил, суть не в картинке, а в формате.
1
 Аватар для probit
70 / 63 / 1
Регистрация: 25.04.2011
Сообщений: 181
29.05.2011, 17:17
Памирыч, наконец-то, до меня допёрло)с прозрачностью всё получилось, но возник один вопрос: у меня есть форма с неким фоном, на форме есть пикчербокс1 с неким фоном, и ещё на пикчербоксе1 есть пикчербокс2, с прозрачным фоном. У меня у пикчербокса2 прозрачность идёт на форму, как бы прорезая пикчербокс1. Как сделать чтобы через прозрачные части пикчербокса2 был виден не фон формы а рисунок пикчербкса1. Вот картинка:
Миниатюры
Графический способ рисования кругов  
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
29.05.2011, 17:17
Помогаю со студенческими работами здесь

Использование графики для рисования кругов
помогите ещё создать с помощью графики эти программы

Что лучше для рисования линий и кругов - QPainter или QGraphicsScene?
Вот реально, что удобней и производительней? Слышал, что QGraphicsScene может быстро рисовать тонну фигур простых и может их позиции что...

Составить программу, реализующую заданный способ движения кругов
5. Дан круг радиуса R (4<=R<=200). Круг обладает свойствами двигаться и делиться пополам каждые 4 секунды. При делении пополам круг...

Самый простой способ рисования
Здравствуйте. Недавно перешёл на Qt и вот появилась потребность нарисовать обычный прямоугольник без заливки. Начал читать документацию......

Подскажите оптимальный способ рисования
Здравствуйте пользователи форума. Делаю карту высот. 1) Подскажите, пожалуйста, какими средствами быстрее всего рисовать в...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru