IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

> Графика, c++
сообщение
Сообщение #1


Знаток
****

Группа: Пользователи
Сообщений: 306
Пол: Мужской
Реальное имя: Евгений

Репутация: -  0  +


Подскажите пожалуйста, как реализовать графический вывод на экран графа и дерева, по соответствующим массивам: двумерному (список смежности) и одномерному соответственно.
Я реализовал алгоритм ПВШ на графе, и теперь это всё нужно наглядно выводить на экран...
С графикой на си++ не работал, поэтому Ваша помощь мне нужна, как никогда : )
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Гость






В общем, вот отображение графа, заданного матрицей смежности:
#include <windows.h>
#include <stdio.h>
#include <math.h>

#define BTN_ID 110

#define SIZE 5
#define R 150
#define E 30

POINT vertex[SIZE];
int adj_mx[SIZE][SIZE] = {
{0, 0, 1, 1, 0},
{0, 0, 0, 1, 1},
{1, 0, 0, 0, 1},
{1, 1, 0, 0, 0},
{0, 1, 1, 0, 0}
};

char szClassName[ ] = "CodeBlocksWindowsApp";
HWND hwnd;

LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
RECT r;
switch (message)
{
case WM_PAINT:
{
PAINTSTRUCT ps;
HDC hMyDC = BeginPaint(hwnd, &ps);

GetClientRect(hwnd, &r);

int center_x = (r.right - r.left) / 2;
int center_y = (r.bottom - r.top) / 2;
double angle = 2 * M_PI / SIZE;
for(int i = 0; i < SIZE; i++) {
vertex[i].x = center_x + (int)(R * cos(M_PI/2 + i * angle));
vertex[i].y = center_y - (int)(R * sin(M_PI/2 + i * angle));
}

HPEN hPen = CreatePen(PS_SOLID, 1, RGB(0, 255, 0));
HGDIOBJ hpenOld = SelectObject(hMyDC, hPen);
for(int i = 0; i < SIZE; i++) {
for(int j = 0; j < SIZE; j++) {
if(adj_mx[i][j]) {
MoveToEx(hMyDC, vertex[i].x, vertex[i].y, NULL);
LineTo(hMyDC, vertex[j].x, vertex[j].y);
}
}
}

for(int i = 0; i < SIZE; i++) {
Ellipse(hMyDC, vertex[i].x - E/2, vertex[i].y - E/2,
vertex[i].x + E/2, vertex[i].y + E/2);
RECT r;
r.left = vertex[i].x - E/2; r.right = vertex[i].x + E/2;
r.top = vertex[i].y - E/2; r.bottom = vertex[i].y + E/2;

char s[3] = {0};
sprintf(s, "%d", i + 1);
DrawText(hMyDC, s, -1, &r, DT_SINGLELINE | DT_CENTER | DT_VCENTER);
}
SelectObject(hMyDC, hpenOld);
DeleteObject(hPen);

EndPaint(hwnd, &ps);
}
break;

case WM_DESTROY:
PostQuitMessage (0);
break;
default:
return DefWindowProc (hwnd, message, wParam, lParam);
}

return 0;
}

int WINAPI WinMain (HINSTANCE hThisInstance,
HINSTANCE hPrevInstance,
LPSTR lpszArgument,
int nCmdShow)
{
MSG messages;
WNDCLASSEX wincl;

wincl.hInstance = hThisInstance;
wincl.lpszClassName = szClassName;
wincl.lpfnWndProc = WindowProcedure;
wincl.style = CS_DBLCLKS;
wincl.cbSize = sizeof (WNDCLASSEX);

wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);
wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
wincl.lpszMenuName = NULL;
wincl.cbClsExtra = 0;
wincl.cbWndExtra = 0;
wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND;

if (!RegisterClassEx(&wincl)) return 0;

hwnd = CreateWindowEx (
0,
szClassName,
"Graph Test",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
500,
500,
HWND_DESKTOP,
NULL,
hThisInstance,
NULL
);

ShowWindow (hwnd, nCmdShow);
while (GetMessage (&messages, NULL, 0, 0))
{
TranslateMessage(&messages);
DispatchMessage(&messages);
}

return messages.wParam;
}

Вот что получается в результате:


Эскизы прикрепленных изображений
Прикрепленное изображение
 К началу страницы 
+ Ответить 

Сообщений в этой теме
Rocket   Графика   4.04.2009 4:30
volvo   В таком случае уточняй, что именно ты используешь:…   4.04.2009 4:47
Rocket   В таком случае уточняй, что именно ты используешь…   4.04.2009 13:01
volvo   Компилятор у меня GCC (DEV C++ использую), ос Win…   4.04.2009 14:16
Rocket   Хм... Ладно. Задам вопрос по-другому. У тебя прил…   4.04.2009 14:48
Rocket   Вот доработанная программа - дерево хранится в дву…   5.04.2009 21:22
Rocket   Что-то обсуждение темы зашло в тупик... volvo, у т…   7.04.2009 1:49
volvo   У меня и сейчас есть идеи, но ты ж молчишь насчет …   7.04.2009 1:53
Rocket   У меня и сейчас есть идеи, но ты ж молчишь насчет…   7.04.2009 2:09
Rocket   Что-то дело не сдвигается с мертвой точки...походу…   8.04.2009 2:02
volvo   Хм... Ну, сначала - ответ на предыдущий вопрос: Ос…   8.04.2009 2:32
volvo   В общем, вот отображение графа, заданного матрицей…   8.04.2009 5:34
Rocket   volvo , а как это откомпилировать и выполнить? У м…   8.04.2009 20:20
volvo   Это не Компилятор, а Компоновщик (он же Линкер). К…   8.04.2009 20:44
Rocket   Это не Компилятор, а Компоновщик (он же Линкер). …   8.04.2009 21:09
Rocket   Так-с, нашел эти библиотеки (libuser32.a, libkerne…   8.04.2009 21:48
volvo   В окне "Build Log" все написано: ты не у…   8.04.2009 22:28
Rocket   В окне "Build Log" все написано: ты не …   8.04.2009 22:59
volvo   То есть, EXE-файл создался, и не запускается? Отде…   8.04.2009 23:09
Rocket   То есть, EXE-файл создался, и не запускается? Отд…   8.04.2009 23:30
volvo   Стоп... Ты настроил пути к компилятору, линкеру, и…   9.04.2009 0:09
Rocket   Стоп... Ты настроил пути к компилятору, линкеру, …   27.05.2009 1:09
volvo   Правый клик на MyComputer (ну, или Мой Компьютер, …   27.05.2009 1:18


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 29.04.2024 23:19
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name