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

Вращение прямоугольника вокруг центра

09.11.2013, 09:49. Показов 4716. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите,пожалуйста. Прямоугольник нарисовала без проблем)как вращать вокруг одной из вершин знаю, а как вокруг центра без понятия.помогите пожалуйста.
Код-нарисованный прямоугольник:
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Public Class Recctangle
    'Задание 2. Задача 1.Составить программу вращения прямоугольника вокруг центра.
    Dim graph As Graphics
    Dim myPen As New Pen(Brushes.Red, 2)
    Dim x2, y2, x3 As Integer
    Dim x1 As Integer = 50
    Dim y1 As Integer = 50
 
    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        graph = Me.CreateGraphics
        x2 = 200
        y2 = 150
        graph.DrawRectangle(myPen, x1, y1, x2, y2)
    End Sub
End Class
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
09.11.2013, 09:49
Ответы с готовыми решениями:

Вращение круглого изображения вокруг центра
Вот этим кодом вращаю колесо автомобиля как сделать так чтобы можно было вращать не одно колесо а 4 ? Dim Pic As New...

Вращение круглого изображения вокруг центра
Собственно вопрос в заголовке

Вращение отрезка вокруг своего конца
Вращение то осуществляется,но почему то меняется длина отрезка,в чем дело? и еще как сделать обратное вращение, т.е. в другую сторону??...

16
 Аватар для ViterAlex
8951 / 4863 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
09.11.2013, 19:55
Лучший ответ Сообщение было отмечено как решение

Решение

VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Public Class Form1
    Dim rect As New Rectangle(0, 0, 100, 150)
    Dim alpha As Single = 0
 
    Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
        Me.Refresh()
    End Sub
 
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
        Timer1.Enabled = True
    End Sub
 
    Private Sub Form1_Paint(sender As Object, e As PaintEventArgs) Handles Me.Paint
        Using g As Graphics = e.Graphics
            g.TranslateTransform(Me.ClientRectangle.Width / 2, Me.ClientRectangle.Height / 2)
            g.RotateTransform(alpha)
            alpha += 1
            g.DrawRectangle(New Pen(Color.Black), New Rectangle(-rect.Width / 2, -rect.Height / 2, rect.Width, rect.Height))
        End Using
    End Sub
End Class
6
Заблокирован
30.08.2015, 21:18
Здравствуйте! Интересная тема.
ViterAlex!
Пользуюсь VSС-2013. Всё сделал как написано. Получилось две ошибки. Что делать?
Копирую код с VSС-2013
Кликните здесь для просмотра всего текста
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
Public Class Form1
    'Задание 2. Задача 1.Составить программу вращения прямоугольника вокруг центра.
    Dim rect As New Rectangle(0, 0, 100, 150)
    Dim alpha As Single = 0
 
    Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
        Me.Refresh()
    End Sub
 
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
        Timer1.Enabled = True
    End Sub
 
    Private Sub Form1_Paint(sender As Object, e As PaintEventArgs) Handles Me.Paint
        Using g As Graphics = e.Graphics
            g.TranslateTransform(Me.ClientRectangle.Width / 2, Me.ClientRectangle.Height / 2)
            g.RotateTransform(alpha)
            alpha += 1
            g.DrawRectangle(New Pen(Color.Black), New Rectangle(-rect.Width / 2, -rect.Height / 2, rect.Width, rect.Height))
        End Using
    End Sub
 
End Class
Миниатюры
Вращение прямоугольника вокруг центра  
0
 Аватар для MACHOMAN
54 / 30 / 4
Регистрация: 15.01.2014
Сообщений: 354
04.09.2015, 16:59
В продолжение темы подскажите доделать курсовик, как сделать вместо квадрата вращающийся вот такой обобьет
Изображения
 
0
Почетный модератор
 Аватар для Памирыч
23251 / 9163 / 1084
Регистрация: 11.04.2010
Сообщений: 11,014
04.09.2015, 18:30
MACHOMAN, раскурите код здесь:
Вращение круглого изображения вокруг центра
2
 Аватар для MACHOMAN
54 / 30 / 4
Регистрация: 15.01.2014
Сообщений: 354
04.09.2015, 21:26
Интересное решение но нужно создать вращающийся круг без PictureBox а с помощью Graphics. Мне удалось создать вращающийся окружность но вот как нанести разметку чтобы получилась похожия фигура как на фото?
Изображения
 
Вложения
Тип файла: rar Вращение прямоугольника вокруг центра.rar (111.7 Кб, 33 просмотров)
0
 Аватар для ViterAlex
8951 / 4863 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
05.09.2015, 06:44
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
''' <summary>
''' Рисование окружности с засечками
''' </summary>
''' <param name="radius">Радиус окружности в пикселях</param>
''' <returns>Возвращает объект типа Bitmap с нарисованной окружностью</returns>
Private Function DrawCircle(radius As Integer) As Bitmap
    Using bmp As New Bitmap(2 * radius + 4, 2 * radius + 4)
        Using g As Graphics = Graphics.FromImage(bmp)
            'Перо для рисования
            Dim drawPen As New Pen(Color.Red, 1) With {.Alignment = Drawing2D.PenAlignment.Inset}
            'Длина длинной и короткой чёрточки
            Dim l As Integer = 20, s As Integer = 10
            'Заливка фона
            g.Clear(Color.White)
            'Перенос начала координат в центр изображения
            g.TranslateTransform(radius + 2, radius + 2)
            'Угол поворота
            Dim angle As Single = CSng(360 / 24)
            For i = 0 To 23
                Select Case i
                    Case 0, 6, 12, 18
                        'В четвертях рисуем длинные засечки
                        g.DrawLine(drawPen, 0, -radius, 0, -radius + l)
                    Case Else
                        'В остальных случаях — короткие
                        g.DrawLine(drawPen, 0, -radius, 0, -radius + s)
                End Select
                'Вращение изображения на заданный угол
                g.RotateTransform(angle)
            Next
            'Возврат к мировым координатам
            g.ResetTransform()
            'Смена цвета пера
            drawPen.Color = Color.Green
            'Рисование окружности
            g.DrawEllipse(drawPen, New Rectangle(2, 2, 2 * radius, 2 * radius))
            'Уничтожение пера
            drawPen.Dispose()
        End Using
        Return bmp
    End Using
End Function
Изображения
 
2
 Аватар для MACHOMAN
54 / 30 / 4
Регистрация: 15.01.2014
Сообщений: 354
05.09.2015, 11:12
ошибок нет но при запуске проекта круг не появляется .в чем может быть проблема?
Миниатюры
Вращение прямоугольника вокруг центра  
0
Почетный модератор
 Аватар для Памирыч
23251 / 9163 / 1084
Регистрация: 11.04.2010
Сообщений: 11,014
05.09.2015, 13:24
MACHOMAN, немного переделал код Алекса

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
    Dim Angl As Single = 0
 
    Private Sub DrawCircle(ByVal radius As Integer, ByVal g As Graphics, ByVal Angl As Single)
        'Перо для рисования
        Dim drawPen As New Pen(Color.Red, 1) With {.Alignment = Drawing2D.PenAlignment.Inset}
        'Длина длинной и короткой чёрточки
        Dim l As Integer = 20, s As Integer = 10
        'Заливка фона
        g.Clear(Color.White)
        g.RotateTransform(Angl)
        'Перенос начала координат в центр изображения
        g.TranslateTransform(radius + 2, radius + 2, Drawing2D.MatrixOrder.Append)
        'Угол поворота
        Dim angle As Single = CSng(360 / 24)
        For i = 0 To 23
            Select Case i
                Case 0, 6, 12, 18
                    'В четвертях рисуем длинные засечки
                    g.DrawLine(drawPen, 0, -radius, 0, -radius + l)
                Case Else
                    'В остальных случаях — короткие
                    g.DrawLine(drawPen, 0, -radius, 0, -radius + s)
            End Select
            'Вращение изображения на заданный угол
            g.RotateTransform(angle)
        Next
        'Возврат к мировым координатам
        g.ResetTransform()
        'Смена цвета пера
        drawPen.Color = Color.Green
        'Рисование окружности
        g.DrawEllipse(drawPen, New Rectangle(2, 2, 2 * radius, 2 * radius))
 
        'Уничтожение пера
        drawPen.Dispose()
    End Sub
 
    Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
        DrawCircle(100, e.Graphics, Angl)
    End Sub
 
    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        Angl += 0.5
        Me.Refresh()
    End Sub
Название: Project012.gif
Просмотров: 133

Размер: 89.1 Кб
3
 Аватар для MACHOMAN
54 / 30 / 4
Регистрация: 15.01.2014
Сообщений: 354
05.09.2015, 13:44
отлично получилось! Параметр Me.Refresh() в таймере заставляет моргать круг это можно исправить?
0
Почетный модератор
 Аватар для Памирыч
23251 / 9163 / 1084
Регистрация: 11.04.2010
Сообщений: 11,014
05.09.2015, 13:46
MACHOMAN, у формы есть параметр DoubleBuffered. Поставьте True, будет лучше
1
 Аватар для MACHOMAN
54 / 30 / 4
Регистрация: 15.01.2014
Сообщений: 354
05.09.2015, 14:36
Действительно помогло. СПАСИБО ВСЕМ ЗА ПОМОЩЬ ! Появилась идея пронумеровать каждую засечку как на фото (показано на одной). Прошу продемонстрировать мне как это можно выполнить
Изображения
 
0
05.09.2015, 15:40

Не по теме:

MACHOMAN, Может ты с начала сам попробуешь сделать, а если не получиться уже спрашивай, только наработки свои кинешь. На самом деле все просто, только надо мозгами пораскинуть, а то с начала цифры, потом стрелки, а в готовой программе будет created by MACHOMAN, хотя прогу ты не писап

0
 Аватар для ViterAlex
8951 / 4863 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
05.09.2015, 18:18
Цитата Сообщение от Памирыч Посмотреть сообщение
немного переделал код Алекса
Ну зачем же рисовать всю эту бодягу в таймере? Рисовать нужно один раз на битмап, а его уже крутить
0
Почетный модератор
 Аватар для Памирыч
23251 / 9163 / 1084
Регистрация: 11.04.2010
Сообщений: 11,014
05.09.2015, 18:40
ViterAlex, ибо:
Цитата Сообщение от MACHOMAN Посмотреть сообщение
нужно создать вращающийся круг без PictureBox а с помощью Graphics
Фраза, конечно, звучит странно, но я понял ее так, что ему надо перерисовывать в событии Paint по таймеру без всяких битмапов.

А так да, естественно лучше нарисовать раз и не париться

Добавлено через 1 минуту
MACHOMAN, включайтесь. edward_freedom, дело говорит. Не то, чтобы кому-то жалко, но лично мне лень заниматься чужими апгрейдами
1
 Аватар для MACHOMAN
54 / 30 / 4
Регистрация: 15.01.2014
Сообщений: 354
05.09.2015, 23:54
Прикрутил цифры к засечкам с помощью DrawImage. получилось криво ( Подскажите как по нормальному осуществить?
Миниатюры
Вращение прямоугольника вокруг центра  
Вложения
Тип файла: rar 1111.rar (1.24 Мб, 34 просмотров)
0
 Аватар для ViterAlex
8951 / 4863 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
06.09.2015, 00:33
Рисовать такое программно — лишняя трата ресурсов. Лучше это делать в графическом редакторе, тем более, что масштабирование и смена информации не предусматривается
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
06.09.2015, 00:33
Помогаю со студенческими работами здесь

Вращение прямоугольника вокруг центра.
Есть программа, которая вращает прмоугольник вокруг центра, но она для АВС. Переделываю ее под Турбо а оно пишет &quot;invalid point...

Вращение прямоугольника заданных размеров в плоскости экрана вокруг своего центра
Изобразить вращения прямоугольника заданных размеров в плоскости экрана вокруг свае во центра Помогите а то я Написал а она не...

Вращение равнобедренного треугольника вокруг центра экрана, и одновременно вокруг своего центра. (Turbo Pascal)
Задача в заголовке. Как вращать треугольник вокруг центра я примерно знаю (писали аналогичное для круга), а вот с одновременным вращением...

Вращение вокруг центра
Подскажите пожалуйста! Вот есть фигуры, они вращаются вокруг осей x, y, z. а как сделать, что бы они вращались вокруг центра?

Вращение квадрата вокруг центра
Здравствуйте! Возникла проблема с написанием программы: В приложении типа QMainWindow построить закрашенный квадрат, вращающийся вокруг...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru