Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/15: Рейтинг темы: голосов - 15, средняя оценка - 5.00
 Аватар для Елена77
0 / 0 / 1
Регистрация: 27.10.2012
Сообщений: 93

Создать окно произвольной формы в виде морской звезды

25.11.2012, 23:22. Показов 2891. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите пожалуйста, в который раз... Прошу

Разбираюсь с неправильными формами. Вот текст программы.
VB.NET
1
2
3
4
5
6
7
8
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim mypath As New System.Drawing.Drawing2D.GraphicsPath 
        Dim pointsA() As Point = {New Point(0, 0), New Point(40, 60), New Point(Me.Width - 100, 10)}
        mypath.AddCurve(pointsA)
        Dim pointsB() As Point = {New Point(Me.Width - 40, Me.Height - 60), New Point(Me.Width, Me.Height), New Point(10, Me.Height)}
        mypath.AddCurve(pointsB)
        mypath.CloseAllFigures()
        Me.Region = New Region(mypath)
Создаётся какая-то причудливая форма.

Что я поняла:
1) создалась эта форма с помощью двух массивов, каждый из которых содержит по 3 точки.
2) применена функция, когда все незамкнутые фигуры замыкаются. "Каждая незамкнутая фигура замыкается путём соединения её начальной и конечной точек ЛИНИЕЙ."
3) "кривая сплайна" прошлась по точкам первого массива...


Что непонятно:
1) Зачем нужны именно два массива?
2) "кривая сплайна" прошлась по точкам первого массива...и затем по вторым?
3) что такое кривая сплайна?

Мне нужно нарисовать форму в форме морской звезды. Есть ли какое-то универсальное объяснение? Как это можно понять? Прошу, подскажите...
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
25.11.2012, 23:22
Ответы с готовыми решениями:

Окно произвольной формы
Всем доброго времени суток Возник вопрос можно ли на vb.NET сделать свою форму например в виде капли или листа? Спасибо. ...

Создать окно произвольной формы
Как создать маску окна? Тобишь не обычное окно, типа квадрата или прямоугольника, а любое, какое мне взблагорасудится, круглое, ромбом,...

Создать окно произвольной формы
Доброго времени суток форумчане! У меня есть код, но необходимо сделать файл .exe. Помогите с визуализацией программного кода (чтобы это...

4
 Аватар для Alex77755
11525 / 3812 / 683
Регистрация: 13.02.2009
Сообщений: 11,229
26.11.2012, 02:27
Попробуй с одним массивом:
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
 
        Dim mypath As New System.Drawing.Drawing2D.GraphicsPath
        Dim pointsA() As Point = {New Point(350, 30), New Point(388, 182), _
                                  New Point(510, 182), New Point(410, 265), _
                                  New Point(445, 400), New Point(350, 315), _
                                  New Point(255, 400), New Point(295, 265), _
                                  New Point(200, 180), New Point(315, 180), _
                                  New Point(350, 30)}
        mypath.AddCurve(pointsA)
        mypath.CloseAllFigures()
        Me.Region = New Region(mypath)
    End Sub
Добавлено через 40 минут
Или так:
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
   Const Pi = 3.14159
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
 
        Dim mypath As New System.Drawing.Drawing2D.GraphicsPath
        Dim N, R1, r2
 
        N = 6' количество лучей
        R1 = 200' радиус лучей
        r2 = 50' радиус ядра
        Dim i, k
 
        Dim pointsA() As Point
        ReDim pointsA(N * 2 + 1)
        k = 0
 
        For i = 0 To 2 * 1.1 * Pi Step 2 * Pi / N
            pointsA(k) = New Point(R1 * Cos(i) + 350, R1 * Sin(i) + 300)
            If k = 2 * N Then
                pointsA(k + 1) = New Point(R1 * Cos(0) + 350, R1 * Sin(0) + 300)
            Else
                pointsA(k + 1) = New Point(r2 * Cos(i + Pi / N) + 350, r2 * Sin(i + Pi / N) + 300)
            End If
 
            k = k + 2
        Next
        mypath.AddCurve(pointsA)
 
        Me.Region = New Region(mypath)
    End Sub
Добавлено через 10 минут
добавь процедурку чтобы по Esc закрывать форму
VB.NET
1
2
3
    Private Sub Form1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
        If e.KeyCode = 27 Then End
    End Sub
Добавлено через 5 минут
Не забудь в самом верху
VB.NET
1
Imports System.Math
Добавлено через 4 минуты
Сплайном (spline) называли гибкую металлическую линейку — универсальное лекало[1], которое использовали чертежники для того, чтобы гладко соединить отдельные точки на чертеже, то есть для графического исполнения интерполяции. Более того, кривая, описывающая деформацию гибкой линейки, зафиксированной в отдельных точках, является сплайном.
1
26.11.2012, 06:12

Не по теме:

Елена77, если таково задание, то дальше можете не читать.
Если делаете для себя, то лучше нарисовать, например, в фотошопе произвольную фигуру и использовать ее в качестве фона, обрезав все лишнее.

0
 Аватар для probit
70 / 63 / 1
Регистрация: 25.04.2011
Сообщений: 181
04.12.2012, 20:13
Елена77, могу посоветовать тебе данный пост, там много по твоей теме. Дизайн формы: методы и приёмы.
0
 Аватар для Елена77
0 / 0 / 1
Регистрация: 27.10.2012
Сообщений: 93
08.12.2012, 15:47  [ТС]
Всем спасибо, догадалась сама. Вот, что здесь нужно было:
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Dim grphTemp As GraphicsPath = New GraphicsPath()
        Dim pntPath(8) As PointF
        Dim rgnSurface As Region
 
        pntPath(0) = New PointF(200, 10)
        pntPath(1) = New PointF(220, 50)
        pntPath(2) = New PointF(260, 70)
        pntPath(3) = New PointF(220, 90)
        pntPath(4) = New PointF(200, 130)
        pntPath(5) = New PointF(180, 90)
        pntPath(6) = New PointF(140, 70)
        pntPath(7) = New PointF(180, 50)
        pntPath(8) = New PointF(200, 10)
 
 
        grphTemp.AddPolygon(pntPath)
        rgnSurface = New Region(grphTemp)
        Me.Region = rgnSurface
И в итоге, вуаля:
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
08.12.2012, 15:47
Помогаю со студенческими работами здесь

Создание формы в виде звезды
1. форма в виде звезды (рис. figure) должна содержать кнопку закрытия формы. 2. создать кнопку, которая будет создавать форму, которая...

Создать звезду с вырезом в виде аналогичной звезды
Добрый вечер. Есть два рисунка звезда - рисунок1 и многоугольник - рисунок2, при рисование возникла проблема с ними. Я нарисовал примерно...

окно произвольной формы
Добрый день.Делаю окно из прямоугольника с закругленными краями.Код взял из учебника.Работает. Непонятно,как работает строчка №9. //...

Окно произвольной формы
Здравствуйте, подскажите пожалуйста как сделать окно произвольной формы, в даном случаее меня интересует форма RoundRectangle. Заранее...

Не создается окно произвольной формы
после компиляции просто что-то работает но ничего не показывает.я уверен что это связано с регионами. но что там? #include...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера 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, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru