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

Оси координат - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 20, средняя оценка - 4.70
kingskeeper
7 / 7 / 1
Регистрация: 08.11.2010
Сообщений: 26
19.11.2010, 06:24     Оси координат #1
Привет всем. Продолжаю я мучать графику на Визуале С++.
Задание состоит в следующем: разработать программу для построения графика функции с осями координат по заданным во внешнем файле точкам.
Считывает из файла моя прога нормально, выводит на экран значения в ListBox, затем рисует график по точкам с помощью LineTo.
НО!
Не знаю,как задать и нарисовать оси координат. Пробовала несколько вариантов,но то ли у меня руки кривые,то ли варианты кривые были.
Подскажите,пожалуйста
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
kingskeeper
7 / 7 / 1
Регистрация: 08.11.2010
Сообщений: 26
23.11.2010, 20:38  [ТС]     Оси координат #2
Вот мой OnPaint():
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
void Prog::OnPaint() 
{
if (IsIconic())
    {
        CPaintDC dc(this); // device context for painting
 
        SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
 
        // Center icon in client rectangle
        int cxIcon = GetSystemMetrics(SM_CXICON);
        int cyIcon = GetSystemMetrics(SM_CYICON);
        CRect rect;
        GetClientRect(&rect);
        int x = (rect.Width() - cxIcon + 1) / 2;
        int y = (rect.Height()-1 - cyIcon + 1) / 2;
 
        // Draw the icon
        dc.DrawIcon(x, y, m_hIcon);
    }
    else
    {
        CDialog::OnPaint();
 
        if(mCanDraw)
        {
            CClientDC dc(GetDlgItem(IDC_STATIC1)); 
            //определение объекта класса CClientDC в элементе диалога  "Static text"
            CRect lRect;  // Объявление объекта класса CRect
            CWnd *pWnd = dc.GetWindow();
            //определение указателя на окно, которое занимает элемент диалога "Static text"
            pWnd->GetClientRect( &lRect ); 
    static const int mX0 = 368;
    static const int mY0 = 276;
            double lDX = (double)lRect.Width() / (double)mX0;
            double lDY = (double)lRect.Height()  / (double)mY0;
 
            CPen Pen(PS_SOLID, 2, RGB(0,0,255)); // инициализация пера
            CPen* lPen = dc.SelectObject(&Pen); // выбор пера
 
            dc.Ellipse(k1 * lDX, p1 * lDY, m1 * lDX, n1 * lDY);
            dc.Ellipse(k2 * lDX, p2 * lDY, m2 * lDX, n2 * lDY);
            dc.Arc(k0 * lDX, p0 * lDY, m0 * lDX, n0 * lDY, a * lDX, b * lDY, c * lDX, d * lDY);
 
            dc.SelectObject(lPen);
        }
    }
 
}
Мне предложили,что точку надо ставить в координате (x,height-y),а не (x,y).
Подскажите,где тут надо переправить?
Не доходит до меня.По-моему это вообще не панацея. Так как надо,чтобы начало координат было в нижнем левом углу,а не в верхнем, как по умолчанию.И соответственно и график чтобы строился от заданного начала координат и координатных осей.По-моему,если сделать так,как мне предложили,то хотя и условный перенос начала координат и произойдет,но график будет строится все равно исходя из стандартных осей координат
dihlofos
Бродяга
 Аватар для dihlofos
302 / 256 / 17
Регистрация: 27.08.2010
Сообщений: 553
24.11.2010, 07:14     Оси координат #3
Цитата Сообщение от kingskeeper Посмотреть сообщение
Мне предложили,что точку надо ставить в координате (x,height-y),а не (x,y).
Ну похоже вам так и надо сделать. Не силён в Visual Studio, вот пример на билдере с испольованием VCL:
C++
1
2
3
4
5
6
7
8
9
10
// точки, задающие окружность
int x1 = 10;
int x2 = 100;
int y1 = 10;
int y2 = 100;
// высота
int heigth = Form1->ClientHeight;
 
Form1->Canvas->Ellipse(x1,y1,x2,y2);  // начало координат вверху
Form1->Canvas->Ellipse(x1,heigth - y1,x2,heigth - y2);  // начало координат внизу
Отображаются две окружности - первая как в вашем примере, вторая - с перевёрнутой осью y. У вас это будет выглядеть наверное как-то так:
C++
1
dc.Ellipse(k1 * lDX, (lRect.Height()-p1) * lDY, m1 * lDX, (lRect.Height()-n1) * lDY)
kingskeeper
7 / 7 / 1
Регистрация: 08.11.2010
Сообщений: 26
24.11.2010, 13:53  [ТС]     Оси координат #4
Теоретически-да.Но если сделать вот так вот (а я уже пробовала и до вашего совета),то вместо картинки в первом вложении,получим картинку во втором вложении.
То есть,во-первых,неправильно рисуется дуга,а во-вторых,возникают проблемы с рисунком во время сворачивания-разворачивания окна.Т.е. при сворачивании рисунок сдвигается вниз (а должен оставаться на месте). При разворачивании,рисунок должен "разворачиваться" вместе с окном.Но здесь он просто исчезает. То ли тут надо как-то доработать,то ли вариант неверный выходит
Пытаюсь еще поиграться с режимами отображения, но пока не очень успешно
Миниатюры
Оси координат   Оси координат  
kingskeeper
7 / 7 / 1
Регистрация: 08.11.2010
Сообщений: 26
27.11.2010, 15:46  [ТС]     Оси координат #5
Проблема в том,что если работать с Height() то перестает работать по-нормальному сворачивание и разворачивание окон
Yandex
Объявления
27.11.2010, 15:46     Оси координат
Ответ Создать тему
Опции темы

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