crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

2 страниц V   1 2 >  
Ответить в данную темуНачать новую тему
> Вопросы по Qpainter
TiiL
  опции профиля:
сообщение 6.2.2012, 14:30
Сообщение #1


Участник
**

Группа: Участник
Сообщений: 124
Регистрация: 8.6.2011
Пользователь №: 2727

Спасибо сказали: 0 раз(а)




Репутация:   0  


рисую график состоящий из точек(кружков):
Раскрывающийся текст
QPen Pen(Qt::blue,1);
    pa.setPen (Pen);
    double Xstep2 = 0.5;
    for(X2=-(hw*scale);X2<(hw*scale);X2+=Xstep2) // до тех пор, пока не дойдём до правого края
    {
    oldY2 = Y2; // запоминаем предыдущее значение, что бы знать, откуда рисовать линию
    Y2 = exp(X2+3); // рассчитываем по формуле текущее значение
    double paintX12 = ((X2-Xstep2)*scale)+(hw); // предыдущее значение X умножаем на масштаб и сдвигаем на пол экрана в право
    double paintX22 = (X2*scale)+(hw);
    double paintY12 = h - ((oldY2*scale)+(hh)); // вычитаем из высоты экрана, т.к. в компьютерах Y идёт сверху вниз, а не снизу вверх как в математике
    double paintY22 = h - ((Y2*scale)+(hh));
    QPoint point(paintX12,paintY12);
    //pa.drawPoint (paintX12,paintY12);//,paintX22,paintY22); // рисуем линию из старых X,Y до новых
    pa.drawEllipse (point,4,4);
    pa.drawPoint (paintX22,paintY22);


Всё хорошо рисует, но рисуется толстенная линия по оси X цвета того же что и drawEllips, где я задаю её рисовать? всё перепробовал(



Эскизы прикрепленных изображений
Прикрепленное изображение
 
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
wiz29
  опции профиля:
сообщение 6.2.2012, 16:30
Сообщение #2


Старейший участник
****

Группа: Участник
Сообщений: 600
Регистрация: 7.7.2010
Из: Санкт-Петербург
Пользователь №: 1866

Спасибо сказали: 94 раз(а)




Репутация:   12  


приведи весь код процедуры рисования пожалуйста.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
TiiL
  опции профиля:
сообщение 7.2.2012, 7:32
Сообщение #3


Участник
**

Группа: Участник
Сообщений: 124
Регистрация: 8.6.2011
Пользователь №: 2727

Спасибо сказали: 0 раз(а)




Репутация:   0  


Вот:Прикрепленный файл  graph.zip ( 258,93 килобайт ) Кол-во скачиваний: 213


Сообщение отредактировал TiiL - 7.2.2012, 7:36
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
wiz29
  опции профиля:
сообщение 7.2.2012, 9:29
Сообщение #4


Старейший участник
****

Группа: Участник
Сообщений: 600
Регистрация: 7.7.2010
Из: Санкт-Петербург
Пользователь №: 1866

Спасибо сказали: 94 раз(а)




Репутация:   12  


Привет, посмотрел твой код. Тебе нужно сделать следующее. Разделить вычисление данных графиков и представления. По коду можно разобрать что в конечно итоге тебе хочется построить, но подход в корне неверный.
1. Непонятно зачем держать не инициализированные изначально переменные
double X,X2;
double Y, Y2, oldY, oldY2;

2. у тебя нет четко представления о связи математических координат с координатами представления (куда ты рисуешь)
(если ты посмотришь на циклы, то там мягко говоря неимоверное кол-во ненужных итераций)

Чтоб не тратить время опиши задачу, которую ты хочешь решить. Из функции рисования видно, что нужно построить графики на некоторой области,
напиши математическую постановку задачи и тогда будет проще подсказать тебе как делать более правильно.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
TiiL
  опции профиля:
сообщение 7.2.2012, 10:04
Сообщение #5


Участник
**

Группа: Участник
Сообщений: 124
Регистрация: 8.6.2011
Пользователь №: 2727

Спасибо сказали: 0 раз(а)




Репутация:   0  


Спасибо за отклик,wiz29.

1-ое хотелось бы просто научиться рисовать оси и на нём графики, дальше научиться рисовать логарифмические оси.
2-ое рисовать графики с данными значениями х и у,
3-ие чтобы оси и графики были связанны, а не так что оси показывают свои какие то числа, а график рисуется по своим числам.

а дальше уже украшение этого всего скролами по осям, различными зумами, выделение точек координат например кружочками или како-нить другой бижютерией.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
wiz29
  опции профиля:
сообщение 7.2.2012, 10:33
Сообщение #6


Старейший участник
****

Группа: Участник
Сообщений: 600
Регистрация: 7.7.2010
Из: Санкт-Петербург
Пользователь №: 1866

Спасибо сказали: 94 раз(а)




Репутация:   12  


А почему не хочешь использовать Qwt?

Цитата(TiiL @ 7.2.2012, 11:04) *
1-ое хотелось бы просто научиться рисовать оси и на нём графики, дальше научиться рисовать логарифмические оси.

Для этого тебе нужно иметь математическое представление о том, что попадает на viewport, т.е. каким образом математическое описание пространства будет проецироваться на порт просмотра.
Например, я хочу видеть видеть на экране порта просмотра (viewport'a) пространство с началом координат размещенном в центре окна, и интервалами по Х [-5;5] по Y[-10, 10] исходя из размера viewport я могу произвести нужные мне вычисления для отрисовки осей и сеток координат.
Либо могу задать другое описание: например матрицей трансформации для преобразования реальных координат точек в координаты порта просмотра. Таких описаний можно много придумать. 2й способ наиболее близок к жизни.

Цитата(TiiL @ 7.2.2012, 11:04) *
2-ое рисовать графики с данными значениями х и у,


Имея мат. представление о пространстве и определенных характеристиках порта просмотра мы можем вычислять значения (с нужным шагом) функций, которые используем для построения графиков. Шаг можно выбирать в зависимости от задач детализации или от информации о поведении функции, тут подходы могут быть различными. Например нет смысла вычислять точки чаще чем 1px на экране, если график задан аналитически и мы знаем функцию вычисления значений.
Цитата(TiiL @ 7.2.2012, 11:04) *
3-ие чтобы оси и графики были связанны, а не так что оси показывают свои какие то числа, а график рисуется по своим числам.
а дальше уже украшение этого всего скролами по осям, различными зумами, выделение точек координат например кружочками или како-нить другой бижютерией.

Ну бижутерия уже определяется специализацией софта как правило.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
TiiL
  опции профиля:
сообщение 7.2.2012, 10:40
Сообщение #7


Участник
**

Группа: Участник
Сообщений: 124
Регистрация: 8.6.2011
Пользователь №: 2727

Спасибо сказали: 0 раз(а)




Репутация:   0  


мне кажется я с qwt еще больше закапаюсь и увязну(


всё что ты описал прокоментирую так:

"Куда же я полез, я же даже читать не умею"

Сообщение отредактировал TiiL - 7.2.2012, 10:55
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
wiz29
  опции профиля:
сообщение 7.2.2012, 11:22
Сообщение #8


Старейший участник
****

Группа: Участник
Сообщений: 600
Регистрация: 7.7.2010
Из: Санкт-Петербург
Пользователь №: 1866

Спасибо сказали: 94 раз(а)




Репутация:   12  


ну к Qwt зря так относишься, неплохой framework для рисования графиков, задача рисования осей и меток к ним совсем не тривиальная как может показаться на первый взгляд. Советую использовать готовые решения, там где это можно, если они удовлетворяют требованиям.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
TiiL
  опции профиля:
сообщение 7.2.2012, 12:20
Сообщение #9


Участник
**

Группа: Участник
Сообщений: 124
Регистрация: 8.6.2011
Пользователь №: 2727

Спасибо сказали: 0 раз(а)




Репутация:   0  


ну вот нашел такой примерчик, ну вот проблема в дизайнере видны виджеты qwt, а в креаторе нет, а можно будет ли в дизайнере создать формочку но присоеденить к моему проекту чтобы я мог ссылаться на него?

вот так подключаю

FORMS += qwtplot.ui

.h:
namespace Ui{
    class qwtplot;
}
class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent =0 );
    ~MainWindow();
private:
    Ui::qwtplot *ui;


.сср:
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent),
    ui(new Ui::qwtplot)
{
    ui->setupUi(this);
}


а выдаёт вот такое

mainwindow.cpp: In constructor 'MainWindow::MainWindow(QWidget*)':

mainwindow.cpp:5: error: invalid use of incomplete type 'struct Ui::qwtplot'

mainwindow.h:13: error: forward declaration of 'struct Ui::qwtplot'

mainwindow.cpp:7: error: invalid use of incomplete type 'struct Ui::qwtplot'

mainwindow.h:13: error: forward declaration of 'struct Ui::qwtplot'

вопрос снялся... буду изучать(ковырятсья) с qwt

Сообщение отредактировал TiiL - 7.2.2012, 13:06
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
TiiL
  опции профиля:
сообщение 7.2.2012, 14:30
Сообщение #10


Участник
**

Группа: Участник
Сообщений: 124
Регистрация: 8.6.2011
Пользователь №: 2727

Спасибо сказали: 0 раз(а)




Репутация:   0  


Спасибо, wiz29. Начал я играться с QWTвозникли конструктивные вопросы:

рисую кривые вот так так:
curv1 = new QwtPlotCurve();
    curv1->setRenderHint(QwtPlotItem::RenderAntialiased);
    curv1->setPen(QPen(Qt::red));

symbol1 = new QwtSymbol();
    symbol1->setStyle (QwtSymbol::Ellipse);
    symbol1->setPen (QColor(Qt::black));
    symbol1->setSize (5);
    curv1->setSymbol (symbol1);


а вот curv2 (например) хочется рисовать не линиями а вот только кружочками, тоесть только координаты точек. как это реализовать?

и второй вопрос:

хотелось бы "нулевые" линии сетки графика выделить как-нить, как это сделать?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

2 страниц V   1 2 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


4 чел. читают эту тему (гостей: 4, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 29.11.2024, 10:14