Форум программистов, компьютерный форум, киберфорум
Pure Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
3 / 3 / 0
Регистрация: 14.12.2020
Сообщений: 171

Нарисовать (повернуть) прямоугольник

10.01.2021, 14:08. Показов 2321. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!
Возможно, это глупый вопрос, но никак не могу сообразить...
В PureBasic нарисовать прямоугольник не проблема...
Достаточно использовать
PureBasic
1
Box(x , y , Width , Height [, Color])
или
PureBasic
1
Line(x , y , Width , Height [, Color])
. Лично я не вижу между ними особой разницы.
Но как быть если надо нарисовать прямоугольник под определенным углом, или повернуть его(разумеется не на 90 градусов - тут и так всё ясно)
Наверняка, есть давно отработанные алгоритмы для решения этой задачи.
Заранее, спасибо!
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
10.01.2021, 14:08
Ответы с готовыми решениями:

Как нарисовать прямоугольник поверх флекса
Попробовал, не получилось. Может кто подскажет?

Как нарисовать прямоугольник в VBA Excel
Координаты вершин прямоугольника должны задаваться по клику мышки. Я попытался создать программу, однако она не работает. Линии по идее...

Нарисовать прямоугольник, стороны которого состоят из разноцветных квадратиков
Требуется нарисовать прямоугольник размером во весь экран, стороны которого состоят из квадратиков разного цвета. Квадратиков должно быть...

6
Эксперт по электронике
6493 / 3123 / 331
Регистрация: 28.10.2011
Сообщений: 12,277
Записей в блоге: 7
10.01.2021, 14:19
PureBasic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
  If OpenWindow(0, 0, 0, 300, 300, "VectorDrawing", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
    CanvasGadget(0, 0, 0, 300, 300)
 
    If StartVectorDrawing(CanvasVectorOutput(0))
      
      RotateCoordinates(VectorOutputWidth()/2, VectorOutputHeight()/2, 20)
      
      AddPathBox(50, 50, 200, 200)
      VectorSourceColor(RGBA(255, 0, 0, 255))
      StrokePath(2)
    
      StopVectorDrawing()
    EndIf
    
    Repeat
      Event = WaitWindowEvent()
    Until Event = #PB_Event_CloseWindow
  EndIf
1
3 / 3 / 0
Регистрация: 14.12.2020
Сообщений: 171
10.01.2021, 14:21  [ТС]
locm, Блин, вроде просто, спасибо!
0
10.01.2021, 14:48

Не по теме:

Цитата Сообщение от nigri_lupus Посмотреть сообщение
Лично я не вижу между ними особой разницы.
Не знаю как внутри Pure Basic реализовано, но знаю, что в GDI прямоугольник рисуется пером и заполняется кистью. То есть есть «обводка» и заполнение. Линия рисуется только пером, даже если перо будет очень толстое, толщиной в целый прямоугольник, то заполнения у линии нет.
В GDI для рисования полигонов есть функция Polygon.

0
3 / 3 / 0
Регистрация: 14.12.2020
Сообщений: 171
10.01.2021, 15:03  [ТС]
Замабувараев, По поводу Line я ошибся

Добавлено через 6 минут
Замабувараев, На сей раз мне GDI и WinApi не обязательны, но на простенький пример с удовольствием бы посмотрел В целях повышения образования
0
10.01.2021, 16:39

Не по теме:

Цитата Сообщение от nigri_lupus Посмотреть сообщение
простенький пример
Я пишу на FreeBASIC, как это перевести в Pure Basic — не знаю.
Code
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
67
68
69
70
71
72
73
Function MainFormWndProc(ByVal hWin As HWND, ByVal wMsg As UINT, ByVal wParam As WPARAM, ByVal lParam As LPARAM) As LRESULT
    
    Select Case wMsg
        
        Case WM_PAINT
            Dim ps As PAINTSTRUCT = Any
            Dim hDC As HDC = BeginPaint(hWin, @ps)
            
            Const rgbGreen As COLORREF = &h0000FF00
            Const rgbBlue As COLORREF = &h00FF0000
            Const ParallelogramPointCount As Long = 4
            
            ' Зелёное перо толщиной три пикселя
            Dim hGreenPen As HPEN = CreatePen(PS_SOLID, 3, rgbGreen)
            ' Простая кисть синего цвета
            Dim hBlueBrush As HBRUSH = CreateSolidBrush(rgbBlue)
            
            ' Выбрать перо и кисть
            Dim hOldPen As HGDIOBJ = SelectObject(hDC, hGreenPen)
            Dim hOldBrush As HGDIOBJ = SelectObject(hDC, hBlueBrush)
            
            ' Прямоугольник
            Dim Parallelogram(ParallelogramPointCount - 1) As POINT = Any
            ' Левый верхняя вершина
            Parallelogram(0).x = 200
            Parallelogram(0).y = 200
            ' Правая верхняя вершина
            Parallelogram(1).x = 500
            Parallelogram(1).y = 200
            ' Правая нижняя вершина
            Parallelogram(2).x = 500
            Parallelogram(2).y = 400
            ' Левая нижняя вершина
            Parallelogram(3).x = 200
            Parallelogram(3).y = 400
            
            ' Рисуем
            Polygon(hDC, @Parallelogram(0), ParallelogramPointCount)
            
            ' Превращаем прямоугольник в параллелорамм
            Parallelogram(0).x += 100
            Parallelogram(1).x += 100
            
            ' Сдвигаем вниз на 400 пикселей, чтобы не пересекался с уже нарисованным
            Parallelogram(0).y += 400
            Parallelogram(1).y += 400
            Parallelogram(2).y += 400
            Parallelogram(3).y += 400
            
            ' Рисуем
            Polygon(hDC, @Parallelogram(0), ParallelogramPointCount)
            
            ' Восстановить старые перо и кисть
            SelectObject(hDC, hOldBrush)
            SelectObject(hDC, hOldPen)
            
            ' Удалить перо и кисть
            DeleteObject(hBlueBrush)
            DeleteObject(hGreenPen)
            
            EndPaint(hWin, @ps)
            
        Case WM_DESTROY
            PostQuitMessage(0)
            
        Case Else
            Return DefWindowProc(hWin, wMsg, wParam, lParam)
            
    End Select
    
    Return 0
    
End Function
Результат во вложении. Пододвинул параллелограмм вверх, а то картинка большая получается.

Миниатюры
Нарисовать (повернуть) прямоугольник  
0
Модератор
10045 / 3891 / 883
Регистрация: 22.02.2013
Сообщений: 5,840
Записей в блоге: 79
10.01.2021, 18:39
VectorDrawings реализован через GDI+. RotateCoordinates это тоже самое что и GdipRotateWorldTransform.
В GDI также можно делать трансформации через SetWorldTransform/ModifyWorldtransform.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
10.01.2021, 18:39
Помогаю со студенческими работами здесь

Как повернуть прямоугольник?
Уменьшить прямоугольник в 2 раза; Повернуть прямоугольник на 90 градусов по часовой стрелке type TForm1 = class(TForm) Button1:...

Нужно повернуть прямоугольник на 90 градусов
Мне нужно повернуть прямоугольник ABCD на 90 градусов(как на картинке красным я сделал) и найти координаты нового повернутого...

Повернуть прямоугольник полученный функций opencv GetMinAreaRect
имеется структура cvBox2D хранящая в себе координаты центра прямоугольника, высота, ширина и угол наклона. С помощью чего можно вырезать...

Как нарисовать прямоугольник, изменить его координаты и нарисовать заново уже без первого прямоугольника?
Как нарисовать прямоугольник, изменить его координаты и нарисовать заного уже без первого прямоугольника?

Нарисовать примитив и повернуть
а) поворот вокруг осей OX, OY на угол φ;φ=Pi,я нарисовал,но не знаю как повернуть,подскажите procedure TForm1.Button1Click(Sender:...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Музыка, написанная Искусственным Интеллектом
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 . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
PowerShell Snippets
iNNOKENTIY21 11.11.2025
Модуль PowerShell 5. 1+ : Snippets. psm1 У меня модуль расположен в пользовательской папке модулей, по умолчанию: \Documents\WindowsPowerShell\Modules\Snippets\ А в самом низу файла-профиля. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru