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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 20, средняя оценка - 4.70
kingskeeper
7 / 7 / 1
Регистрация: 08.11.2010
Сообщений: 26
#1

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

19.11.2010, 06:24. Просмотров 2591. Ответов 4
Метки нет (Все метки)

Привет всем. Продолжаю я мучать графику на Визуале С++.
Задание состоит в следующем: разработать программу для построения графика функции с осями координат по заданным во внешнем файле точкам.
Считывает из файла моя прога нормально, выводит на экран значения в ListBox, затем рисует график по точкам с помощью LineTo.
НО!
Не знаю,как задать и нарисовать оси координат. Пробовала несколько вариантов,но то ли у меня руки кривые,то ли варианты кривые были.
Подскажите,пожалуйста
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.11.2010, 06:24     Оси координат
Посмотрите здесь:

Отображение матрицы симметрично относительно вертикальной оси C++
На PictureBox нарисовать оси координат X и Y C++
Вращение прямоугольника вокруг оси C++
C++ Вращение объекта вокруг оси. Матрицы поворота.
C++ Поворот вокруг произвольной оси
C++ Как будет себя вести на оси координат домик по формуле y=1+z^2
Ядрышко ОСи пишу C++
C++ Нарисовать треугольник, вращающийся вокруг своей оси
Угол отрезка к оси OY C++
Разметка оси в соответствии с диапазоном значений C++
Отразить матрицу относительно горизонтальной оси C++
Пересечение отрезков числовой оси C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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
303 / 257 / 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     Оси координат
Ответ Создать тему
Опции темы

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