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

Нарисовать правильный 8-ми угольник

07.05.2022, 15:04. Показов 3329. Ответов 22
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Координаты любые просто правильный 8-ми угольник, что-то типо этого



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
30
 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim ris As Graphics
        ris = Me.PictureBox1.CreateGraphics
        Dim a, b, c, o As Point
        Dim alf, bet, gam As Double
        Dim i, l As Integer
        o.X = 150
        o.Y = 150
        l = 150
        For i = 0 To 100
            alf = 5 * i * Math.PI / 180
            bet = 90 * Math.PI / 180
            gam = 30 * Math.PI / 180
            a.X = o.X + l * Math.Cos(alf)
            a.Y = o.Y - l * Math.Sin(alf)
            b.X = a.X - 30 * Math.Cos(alf - bet)
            b.Y = a.Y + 30 * Math.Sin(alf - bet)
            c.X = a.X - 30 * Math.Cos(alf + gam)
            c.Y = a.Y + 30 * Math.Sin(alf + gam)
            ris.DrawLine(Pens.Black, o, a)
            ris.DrawLine(Pens.Black, a, b)
            ris.DrawLine(Pens.Black, b, o)
            Threading.Thread.Sleep(50)
            ris.Clear(Color.White)
        Next i
 
 
 
    End Sub
End Class
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
07.05.2022, 15:04
Ответы с готовыми решениями:

Правильный n-угольник вписан в окружность радиуса. Вычислить длину его стороны
нужно сделать в visual basic правильный n-угольник вписан в окружность радиуса. Вычислить длину его стороныТема переименована....

Программа которая выводит на экран правильный n - угольник
Написать программу, которая выводит правильный n-угольник на экран, если задать число n.

Нарисовать правильный n-угольник
Нужно написать программу для рисования правильного n-угольника. Входные параметры: количество вершин и длина стороны. У меня есть код,...

22
Любитель
 Аватар для Тим70
1045 / 754 / 161
Регистрация: 27.01.2019
Сообщений: 1,520
07.05.2022, 15:45
niop1233, Как пример,только в полигоне задайте нужные координаты
VB.NET
1
2
3
4
5
6
7
8
 Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        Dim ris As Graphics
        ris = Me.PictureBox1.CreateGraphics
        Dim P1 As New Pen(Color.Red, 3)
        ' Задаем координаты полигона
        Dim Pol1() As Point = {New Point(20, 100), New Point(50, 50), New Point(100, 50), New Point(120, 100), New Point(120, 150), New Point(100, 200), New Point(50, 200), New Point(20, 100)}
        ris.DrawPolygon(P1, Pol1)
    End Sub
2
0 / 0 / 0
Регистрация: 03.01.2022
Сообщений: 14
07.05.2022, 15:56  [ТС]
Я немного тупой, куда их вписать нужно?
0
0 / 0 / 0
Регистрация: 03.01.2022
Сообщений: 14
07.05.2022, 16:02  [ТС]
и восьмиугольник нужен вот такой
Изображения
 
0
Любитель
 Аватар для Тим70
1045 / 754 / 161
Регистрация: 27.01.2019
Сообщений: 1,520
07.05.2022, 16:13
niop1233, В строке 6
VB.NET
1
New Point(20, 100)
Это координаты одной точки 20-Х,100-Y.Вот их и поменяйте.Высчитывать их по вашему рисунку некогда,попробуйте сами.
4
0 / 0 / 0
Регистрация: 03.01.2022
Сообщений: 14
07.05.2022, 16:19  [ТС]
спасибо за это
0
3260 / 3302 / 556
Регистрация: 17.02.2019
Сообщений: 5,199
07.05.2022, 17:13
тут примерчик есть не мой. Можно многоугольник сделать
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
    Private Sub Form1_Paint(ByVal sender As Object, ByVal e As PaintEventArgs) Handles Me.Paint
        ' DrawRegularPolygon(Координаты центра окружности, Количество вершин, Радиус, e.Graphics)
        DrawRegularPolygon(New PointF(100, 100), 8, 100, e.Graphics)
    End Sub
    ' center Координаты центра окружности, vertexes Количество вершин, radius Радиус
    Private Sub DrawRegularPolygon(ByVal center As PointF, ByVal vertexes As Integer, ByVal radius As Single, ByVal graphics As Graphics)
        Dim angle = Math.PI * 2 / vertexes
        Dim points = Enumerable.Range(0, vertexes).[Select](Function(i) PointF.Add(center, New SizeF(CSng(Math.Sin(i * angle)) * radius, CSng(Math.Cos(i * angle)) * radius)))
        graphics.DrawPolygon(Pens.Black, points.ToArray())
        ' рисует описанный круг
        'graphics.DrawEllipse(Pens.Aqua, New RectangleF(PointF.Subtract(center, New SizeF(radius, radius)), New SizeF(radius * 2, radius * 2)))
    End Sub
4
0 / 0 / 0
Регистрация: 03.01.2022
Сообщений: 14
07.05.2022, 17:18  [ТС]
А можно его заствить ещё криться через эти строчки
VB.NET
1
  Threading.Thread.Sleep(50)
0
1548 / 1525 / 325
Регистрация: 03.10.2012
Сообщений: 1,551
07.05.2022, 17:45
niop1233, не знаю, что такое "криться", только догадываюсь. Можно.
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
' center Координаты центра окружности, vertexes Количество вершин, radius Радиус
    Private Sub DrawRegularPolygon(ByVal center As PointF, ByVal vertexes As Integer, ByVal radius As Single, ByVal graphics As Graphics)
        Dim angle = Math.PI * 2 / vertexes
        Dim points = Enumerable.Range(0, vertexes).[Select](Function(i) PointF.Add(center, New SizeF(CSng(Math.Sin(i * angle)) * radius, CSng(Math.Cos(i * angle)) * radius))).ToList
        points.Add(New PointF(points(0).X, points(0).Y))
        For i = 0 To vertexes - 1
            graphics.DrawLine(Pens.Black, points(i), points(i + 1))
            Threading.Thread.Sleep(50)
        Next
 
        'graphics.DrawPolygon(Pens.Black, points.ToArray())
        ' рисует описанный круг
        'graphics.DrawEllipse(Pens.Aqua, New RectangleF(PointF.Subtract(center, New SizeF(radius, radius)), New SizeF(radius * 2, radius * 2)))
    End Sub
2
0 / 0 / 0
Регистрация: 03.01.2022
Сообщений: 14
07.05.2022, 17:53  [ТС]
Вот само задание 3,2
Миниатюры
Нарисовать правильный 8-ми угольник  
0
0 / 0 / 0
Регистрация: 03.01.2022
Сообщений: 14
07.05.2022, 17:54  [ТС]
как я понял нужно создать правильный 8-ми угольник и заставить его крутиться по оси
0
4709 / 3662 / 857
Регистрация: 02.02.2013
Сообщений: 3,518
Записей в блоге: 2
07.05.2022, 19:12
С вращением
Кликните здесь для просмотра всего текста
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
30
31
32
Private isLoad As Boolean
Private Rotation As Double
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Timer1.Interval = 100
    Rotation = 0
    isLoad = True
    PictureBox1.Invalidate()
    Timer1.Enabled = True
End Sub
Private Sub PictureBox1_Paint(sender As Object, e As PaintEventArgs) Handles PictureBox1.Paint
    If Not isLoad Then Exit Sub
    Dim xy As Single = 210
    Dim g As Graphics = e.Graphics
    g.Clear(PictureBox1.BackColor)
    g.TranslateTransform(xy, xy)
    g.RotateTransform(CSng(Rotation * -57.3))
    DrawRegularPolygon(New PointF(0, 0), 8, 190, g)
End Sub
 
Private Sub DrawRegularPolygon(ByVal center As PointF, ByVal vertexes As Integer, ByVal radius As Single, ByVal graphics As Graphics)
    Dim angle = Math.PI * 2 / vertexes
    Dim points = Enumerable.Range(0, vertexes).[Select](Function(i) PointF.Add(center, New SizeF(CSng(Math.Sin(i * angle)) * radius, CSng(Math.Cos(i * angle)) * radius))).ToList
    points.Add(New PointF(points(0).X, points(0).Y))
    For i = 0 To vertexes - 1
        graphics.DrawLine(Pens.Black, points(i), points(i + 1))
    Next
End Sub
 
Private Sub Timer1_Tick(sender As System.Object, e As System.EventArgs) Handles Timer1.Tick
    Rotation += 0.05
    PictureBox1.Invalidate()
End Sub
2
0 / 0 / 0
Регистрация: 03.01.2022
Сообщений: 14
07.05.2022, 19:29  [ТС]
А легче это написать можно просто меня перепод задушит с объяснением каждой строки
0
07.05.2022, 19:33

Не по теме:

Цитата Сообщение от niop1233 Посмотреть сообщение
легче
Легче только монитор крутить под носом у препода.

0
0 / 0 / 0
Регистрация: 03.01.2022
Сообщений: 14
07.05.2022, 20:02  [ТС]
не ну просто мы код этот писали примерно как я кидал вверху, то есть писать каждую линию в коде и её кординаты вычеслять по синусам косинусам и тп.и тд.

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
30
Public Class Form1
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim O, A, B, C As Point
Dim Gr As Graphics
Dim L, H, i As Integer
Dim alf, bet, gam As Double
L = 100
H = 30
Gr = картинка.CreateGraphics
O.X = 200
O.Y = 200
For i = 0 To 100
alf = 5 * i * Math.PI / 180
bet = 90 * Math.PI / 180
gam = 30 * Math.PI / 180
A.X = O.X + L * Math.Cos(alf)
A.Y = O.Y - L * Math.Sin(alf)
Gr.DrawLine(Pens.Black, O, A)
B.X = A.X - 30 * Math.Cos(alf - bet)
B.Y = A.Y + 30 * Math.Sin(alf - bet)
C.X = A.X - 30 * Math.Cos(alf - gam)
C.Y = A.Y + 30 * Math.Sin(alf - gam)
Gr.DrawLine(Pens.Black, A, B)
Gr.DrawLine(Pens.Black, A, C)
Gr.DrawLine(Pens.Black, B, C)
Threading.Thread.Sleep(50)
Gr.Clear(Color.White)
Next
End Sub
End Class
Добавлено через 21 минуту
Тим70, можно твой код, который ты написал заставить вращаться?
0
Любитель
 Аватар для Тим70
1045 / 754 / 161
Регистрация: 27.01.2019
Сообщений: 1,520
07.05.2022, 21:00
niop1233, Скорее всего можно,не думал об этом,но код вряд ли получиться короче и понятнее,чем у ovva.Да и нужно ли тебе это вращение?Это уже другой уровень мастерства.

Добавлено через 17 минут
Вообще то похоже нужно... Но как это сделать не знаю,ни когда этим не занимался.
0
3260 / 3302 / 556
Регистрация: 17.02.2019
Сообщений: 5,199
07.05.2022, 21:01
Цитата Сообщение от niop1233 Посмотреть сообщение
можно твой код, который ты написал заставить вращаться?
А код тут причем? зачем его вращать?
0
0 / 0 / 0
Регистрация: 03.01.2022
Сообщений: 14
07.05.2022, 21:08  [ТС]
не код, а сам восьмиугольник (курсач такой)

Добавлено через 27 секунд
Тим70, не код, а сам восьмиугольник (курсач такой)
0
Любитель
 Аватар для Тим70
1045 / 754 / 161
Регистрация: 27.01.2019
Сообщений: 1,520
07.05.2022, 21:54
niop1233, Понимаю только,что все координаты нужно менять одновременно с помощью sin и cos,вот только как это реализовать не знаю.Может кто нибудь более знающий поможет.
0
 Аватар для ViterAlex
8953 / 4865 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
07.05.2022, 22:25
По заданию я бы предположил, что нужно вращать не Graphics, а вершины. Это можно делать с помощью матрицы аффинных преобразований

Добавлено через 24 минуты
Как-то так
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
Imports System.Drawing.Drawing2D
 
Public Class Form1
 
    Public Sub New()
 
        ' This call is required by the designer.
        InitializeComponent()
 
        ' Add any initialization after the InitializeComponent() call.
        points = GetPolygon(8, 200)
        m.Rotate(10.0F)
        AddHandler t.Tick, AddressOf timer_Tick
        SetStyle(ControlStyles.ResizeRedraw, True)
    End Sub
    ''' <summary>
    ''' Правильный многоугольник по заданному числу сторон и радиусу описанной окружности
    ''' </summary>
    ''' <param name="n">Количество сторон</param>
    ''' <param name="r">Радиус описанной окружности</param>
    ''' <exception cref="ArgumentException">Возникает, если указанное число сторон меньше 3</exception>
    Private Function GetPolygon(ByVal n As Integer, ByVal r As Single) As PointF()
        If n < 3 Then
            Throw New ArgumentException("Число сторон должно быть больше 3.")
        End If
        If r < 0 Then
            Throw New ArgumentException("Радиус должен быть положительным числом")
        End If
        Dim result = New PointF(n) {}
        Dim angle = 2 * Math.PI / n
        For i = 0 To n
            Dim x = r * Math.Cos(i * angle)
            Dim y = r * Math.Sin(i * angle)
            result(i) = New PointF(x, y)
        Next
        Return result
    End Function
    'Вершины многоугольника
    Private points As PointF()
    'Таймер
    Private ReadOnly t As New Timer With {.Interval = 200}
    'Матрица поворота
    Private ReadOnly m As New Matrix
 
    Private Sub timer_Tick(sender As Object, e As EventArgs)
        'По таймеру поворачиваем вершины многоугольника матрицей аффинных преобразований
        m.TransformPoints(points)
        'Обновляем форму
        Invalidate()
    End Sub
 
    'Запуск/останов таймера по двойному клику
    Protected Overrides Sub OnMouseDoubleClick(e As MouseEventArgs)
        MyBase.OnMouseDoubleClick(e)
        t.Enabled = Not t.Enabled
    End Sub
 
    'Прорисовка многоугольника по центру формы
    Protected Overrides Sub OnPaint(e As PaintEventArgs)
        MyBase.OnPaint(e)
        Dim dx = ClientSize.Width / 2.0F
        Dim dy = ClientSize.Height / 2.0F
        e.Graphics.TranslateTransform(dx, dy)
        e.Graphics.DrawPolygon(Pens.Blue, points)
    End Sub
End Class
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
07.05.2022, 22:25
Помогаю со студенческими работами здесь

Нарисовать закрашенный правильный 12-угольник, внутри него - закрашенный правильный 5-угольник, внутри 5-угольника - закрашенный квадрат, а внутри
Здравствуйте,помогите решить задачу. Нарисовать закрашенный правильный 12-угольник, внутри него - закрашенный правильный 5-угольник,...

Нарисовать правильный n-угольник и соединить диагонали
Помогите!! Надо нарисовать n-угольник и соединить все вершины между собой. Цвет диагоналей должен рандомно меняться. На C++.

Нарисовать с помощью turtle правильный n-угольник со стороной заданной длины
Помогите с заданием Задача Ч.5. Напишите функцию, которая рисует с помощью черепашки правильный n-угольник со стороной данной длины....

Правильный n-угольник
Помогите, пожалуйста. Задача - нарисовать правильный n-угольник с помощью полярных координат. r - расстояние от полюса до точки, u -...

Построить правильный 8-угольник
Построить правильный 8-угольник.


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru