Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
0 / 0 / 0
Регистрация: 11.06.2013
Сообщений: 15

Операция объединения для графических примитивов

26.05.2015, 20:38. Показов 2025. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть задача: создать систему классов, реализующих графические примитивы (круг, треугольник, квадрат) на плоскости с реализацией операций над множествами (объединение, пересечение, разность).
Все выполняемо, кроме самого главного.
Не могу понять как сделать такую функцию, которая бы строила новую фигуру по результату операции. Допустим есть два круга, для которых выполняется операция объединения. Функция получит координаты двух фигур и выполнит объединение, но вернуть то нужно будет совсем не круг и даже не примитив. Как можно написать такую функцию? На примере, допустим, кругов.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
26.05.2015, 20:38
Ответы с готовыми решениями:

Рисование графических примитивов
Приложение, которое читает данные из файла о координатах и размерах различных графических примитивов (отрезок, прямоугольник, эллипс,...

Отображение графических примитивов
не подскажите как нарисовать круг, треугольник и домик. Ищу в интернете не как не могу найти(

Хранение, вывод и изменение графических примитивов
Здравствуйте! Помогите новичку организовать хранение, вывод и изменение графических примитивов. Буду благодарен за хорошую литературу. ...

3
0 / 0 / 1
Регистрация: 26.05.2015
Сообщений: 2
26.05.2015, 21:31
Лучший ответ Сообщение было отмечено FatSlowpoke как решение

Решение

C++
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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
#include <Windows.h>
#include <tchar.h>
 
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
 
int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrev, LPTSTR cmd, int mode)
{
    const TCHAR szClassMainName[] = _T("Main");
    HWND  hWnd;
    MSG   msg;
    WNDCLASS wc;
 
    wc.style            = CS_VREDRAW | CS_HREDRAW;
    wc.lpfnWndProc      = WndProc;
    wc.cbClsExtra       = 0;
    wc.cbWndExtra       = 0;
    wc.hInstance        = hInstance;
    wc.hIcon            = LoadIcon(NULL, IDI_APPLICATION);
    wc.hCursor          = LoadCursor(NULL, IDC_ARROW);
    wc.hbrBackground    = (HBRUSH)GetStockObject(WHITE_BRUSH);
    wc.lpszMenuName     = NULL;
    wc.lpszClassName    = szClassMainName;
 
    if (!RegisterClass(&wc))
        return 1;
 
    hWnd = CreateWindow(szClassMainName, _T(""), WS_OVERLAPPEDWINDOW, 0, 0, 500, 500, NULL, NULL, hInstance, NULL);
 
    if (!hWnd)
      return 1;
 
    ShowWindow(hWnd, mode);
    UpdateWindow(hWnd); 
 
    while (GetMessage(&msg, NULL, 0, 0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
 
    return 0;
}
 
 
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    HDC  hDC;
    PAINTSTRUCT ps;
 
    static int   clientWidth,  clientHeight;
    static HPEN   pen = NULL;
    static HBRUSH  brush = NULL;
 
    RECT  rectangle = {-50, 50, 50, -50};
    RECT  circle = {-20, 20, 150, -150};
    HRGN  region1, region2;
 
    switch (message)
    {
        case WM_CREATE:
            pen   = CreatePen(PS_INSIDEFRAME, 1, RGB(0,128,0));
            brush = CreateSolidBrush(RGB(0,0,128));
            break;
 
        case WM_SIZE:
            clientWidth  = LOWORD(lParam);
            clientHeight = HIWORD(lParam);
            break;
 
        case WM_PAINT:
            hDC = BeginPaint(hWnd, &ps);
 
            SetMapMode(hDC, MM_ANISOTROPIC);
            SetWindowExtEx(hDC, clientWidth, -clientHeight, NULL);
            SetViewportExtEx(hDC, clientWidth, clientHeight, NULL);
            SetViewportOrgEx(hDC, clientWidth/2, clientHeight/2, NULL);
 
            SelectObject(hDC, pen);
            SelectObject(hDC, brush);
 
            region1 = CreateRectRgnIndirect(&rectangle);
            region2 = CreateEllipticRgnIndirect(&circle);
            CombineRgn(region1, region1, region2, RGN_XOR);
            FillRgn(hDC, region1, brush);
 
            DeleteObject(region1);
            DeleteObject(region2);
            EndPaint(hWnd, &ps);
            break;
 
        case WM_DESTROY:
            DeleteObject(pen);
            DeleteObject(brush);
            PostQuitMessage(0);
            break;
 
        default:
            return DefWindowProc(hWnd, message, wParam, lParam);
    }
    return 0;
}
Изображения
 
0
0 / 0 / 1
Регистрация: 26.05.2015
Сообщений: 2
26.05.2015, 21:40
Регион — это область экрана, представляющая собой комбинацию прямоугольников, полигонов и эллипсов.
Регионы можно использовать для заливки сложных фигур, а также для установки области отсечения, т. е. области вывода.
0
0 / 0 / 0
Регистрация: 11.06.2013
Сообщений: 15
26.05.2015, 22:50  [ТС]
Огромное спасибо, пойду прикручу к классам с:

Добавлено через 1 час 7 минут
А возможна ли реализация подобного алгоритма без использования WinAPI, в консольном приложении?
Наглядное представление не так уж обязательно, главное принцип
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
26.05.2015, 22:50
Помогаю со студенческими работами здесь

Реализация двойной буферизации для рисования графических примитивов
Решил я значит порисовать всяких кружков-квадратиков, а они мерцают. Убрал эффект наполовину, перестав обрабатывать WM_ERASEBKGND. Однако...

Использование графических примитивов для создания статических и динамических изображений
Здравствуйте! А кто-то уже делал нечто подобное в Делфи? Лично у меня фантазии вообще нету, дабы придумать что-то.. Хотя примеры привели -...

Основные методы для рисования графических примитивов в Windows Forms
Назвать основные методы для рисования графических примитивов (Windows Forms)

Библиотека C для рисования графических примитивов в буфер или файл
Коллеги, подскажите, пожалуйста ответ на мой вопрос! У меня такая задача - рисовать различные графические элементы (прямые, дуги,...

Взаимодействие графических примитивов
Возможно ли на VB6 создать программу в которой было бы реализовано в полной мере взаимодействие графических примитивов с привязанными к ним...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера 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