Форум программистов, компьютерный форум CyberForum.ru

Нарисовать круговую диаграмму на основе имеющихся данных - C++

Восстановить пароль Регистрация
 
romasimeiz
6 / 6 / 0
Регистрация: 11.04.2011
Сообщений: 260
03.04.2014, 12:41     Нарисовать круговую диаграмму на основе имеющихся данных #1
Добрый день!
Помогите разобраться с данной функцией.
Идея такая: Из файла считывается к примеру 100 значений в
C++
1
list
, далее некая процедура обрабатывает эти данные и записывает результат.
Есть контейнер m_Data, в котором хранится набор этих самых значений. Приведённая ниже функция рисует график по 10 первым значениям.
Теперь задача стоит, чтобы таким же образом построить круговую диаграмму.
Если можете, помогите разобраться.
Что то примерно понял, благодаря комментариям.
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
void lab03::RenderDiagram( HDC wdc, const RECT& rc ) const
{
    if( m_Data.empty() )
        return;
 
    HPEN pen = CreatePen( PS_SOLID, 3, RGB( 0, 0, 255 ) ); 
    SelectObject( wdc, pen ); 
   //количество элементов для вывода
    const int M = min( int( m_Data.size() ), 10 );
 
    //ищем минимум и максимум
    elem mn = m_Data.front(), mx = mn;
    int p = 0;
    for( it i = m_Data.begin(), e = m_Data.end(); i != e && p < M; ++p, ++i )
    {
        mn = min( *i, mn );
        mx = max( *i, mx );
 
    }// for( it i = m_Data.begin(), e = m_Data.end(); i != e && p < M; ++p, ++i )
 
    //масштаб элементов
    const elem D = max( 1, mx - mn );
 
    //масштаб по х
    float sx = float( rc.right - rc.left ) / M;
    //масштаб по у
    float sy = float( rc.bottom - rc.top );
 
    p = 0;
    for( it i = m_Data.begin(), e = m_Data.end(); i != e; ++i, ++p )
    {
        //координаты текущей точки
        int x = int( p * sx );
 
        //масштабируем значение
        float val = float( *i - mn ) / D;
 
        //вычтем из нижней границы окна, 
        //т.к. начало координат в левом верхнем углу окна.
        int y = rc.bottom - int( val * sy );
                
        if( !p )
            MoveToEx( wdc, x, y, 0 );
        else
            LineTo( wdc, x, y );
 
    }// for( it i = m_Data.begin(), e = m_Data.end(); i != e; ++i, ++p )
            
        DeleteObject( pen );
 
}
Добавлено через 26 минут
Пробовал при помощи функции AngleArc(wdc, nX, nY, dwRadius, xStartAngle, xSweepAngle);

Объясните пожалуйста, как при помощи моих 10-ти значений из m_Data построить эту круговую диаграмму?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.04.2014, 12:41     Нарисовать круговую диаграмму на основе имеющихся данных
Посмотрите здесь:

C++ прога на основе базы данных на уровне чайника!!
Написать программу, которая выводит круговую диаграмму. C++
C++ Простой класс на основе заданной структуры данных с++
двусвязный список. База данных на его основе C++
класс на основе заданной структуры данных C++
График на основе данных с++ C++
C++ Найти зарплату на основе данных двумерного массива
Заполнить массив В на основе данных матрицы А C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 21:01. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru