Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

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

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

На PictureBox нарисовать оси координат X и Y - C++
Приветствую! Нужно на pictureBox нарисовать оси координат x и y ---- Пытался сделать сам, но у меня все линии в разные стороны ))...

Как будет себя вести на оси координат домик по формуле y=1+z^2 - C++
помогите с кодом проги которая будет расчитывать как будет вести себя домик на оси координат по формуле y= 1+z^2(комплексная форма)

Ядрышко ОСи пишу - C++
хм.Изучаю си два месяца.Хочу написать ОС.Простую, командную строку.И хочу писать ядро.Сложно ли это?Допустим епросто хелловорлд и cin.Как...

Блокировка мыши по оси y - C++
Здравствуйте! Нужно решить задачу: Вычислять текущую позицию по оси y, и при нажатии ctrl(control)+1 блокировать мышь по этой оси, т.е...

Угол отрезка к оси OY - C++
Добрый вечер, нужно имея первую точку (устройство) и вторую точку (цель) найти градусное соответсвие поворота 0-360. Что-то голова не...

Пересечение отрезков числовой оси - C++
Дано 2*N действительных чисел . Они определяют N интервалов числовой оси 1, a2], 3, a4], ..., 2*N-1, a2*N]. Имеют ли все данные...

4
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).
Подскажите,где тут надо переправить?
Не доходит до меня.По-моему это вообще не панацея. Так как надо,чтобы начало координат было в нижнем левом углу,а не в верхнем, как по умолчанию.И соответственно и график чтобы строился от заданного начала координат и координатных осей.По-моему,если сделать так,как мне предложили,то хотя и условный перенос начала координат и произойдет,но график будет строится все равно исходя из стандартных осей координат
0
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)
1
kingskeeper
7 / 7 / 1
Регистрация: 08.11.2010
Сообщений: 26
24.11.2010, 13:53  [ТС] #4
Теоретически-да.Но если сделать вот так вот (а я уже пробовала и до вашего совета),то вместо картинки в первом вложении,получим картинку во втором вложении.
То есть,во-первых,неправильно рисуется дуга,а во-вторых,возникают проблемы с рисунком во время сворачивания-разворачивания окна.Т.е. при сворачивании рисунок сдвигается вниз (а должен оставаться на месте). При разворачивании,рисунок должен "разворачиваться" вместе с окном.Но здесь он просто исчезает. То ли тут надо как-то доработать,то ли вариант неверный выходит
Пытаюсь еще поиграться с режимами отображения, но пока не очень успешно
0
Миниатюры
Оси координат   Оси координат  
kingskeeper
7 / 7 / 1
Регистрация: 08.11.2010
Сообщений: 26
27.11.2010, 15:46  [ТС] #5
Проблема в том,что если работать с Height() то перестает работать по-нормальному сворачивание и разворачивание окон
0
27.11.2010, 15:46
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.11.2010, 15:46
Привет! Вот еще темы с ответами:

Определить, параллельна ли прямая оси Y - C++
Здравствуйте. Подскажите, пожалуйста, как в данном конкретном случае правильно определить, параллельна ли прямая оси Y (то есть как...

Вращение прямоугольника вокруг оси - C++
Программа должна вращать прямоугольник с заданными параметрами длины и ширины, вокруг оси. Общий алгоритм приведен ниже. Вопрос: как...

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

Треугольник отобразить относительно оси симметрии - C++
Треугольник А(-4,-1) В(-2,-1) С(-1,-3) отобразить относительно оси симметрии Y= -X Помогите пожалуйста решить с помощью матриц


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

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