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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
romasimeiz
6 / 6 / 0
Регистрация: 11.04.2011
Сообщений: 260
#1

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

03.04.2014, 12:41. Просмотров 233. Ответов 0
Метки нет (Все метки)

Добрый день!
Помогите разобраться с данной функцией.
Идея такая: Из файла считывается к примеру 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++ Структуры: На основе данных входного файла составить список студентов
Поиск по базе данных на основе txt -файла C++
двусвязный список. База данных на его основе C++
класс на основе заданной структуры данных C++
График на основе данных с++ C++
Аппроксимация данных изображения на основе сети многослойного персептрона C++
C++ Найти зарплату на основе данных двумерного массива
Заполнить массив В на основе данных матрицы А C++
C++ Программа выводит в окне диаграмму динамического массива данных
C++ Даны две строки. Составить третью строку из слов, имеющихся в обеих данных строках

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

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

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