10.01.2010, 19:30 | #1 |
Почти участник
Регистрация: 02.02.2008
Сообщений: 1,843
Репутация: 5599
|
Строим графики на Qt
Привет, сегодня я расскажу, как написать программу, строящую графики математичиских функций в пространстве R2.
Однажды мне понадобилось построить график нефиговой функции, точно ее не помню, но там было что-то вроде 2x^3 + 18sin(x) – 15 arctg(x). Руками просчитывать каждую точку совсем не хотелось, доступа к интернету не было, но зато был нетбук с установленным Qt SDK. Итак, запускаем Qt Creator, жмем Ctrl-N, выбираем Qt 4 GUI Application. Откроется новый проект, выбирай в древе проекта пункт «Формы», там будет MainWindow.ui, открывай его. Перед тобой главный виджет приложения. Кидай на него 3 Label'а, 3 DoubleSpinBox'a, 1 PushButton, 1 Horizontal Line и 1 GraphicsView. Далее выбирай в редакторе, удерживая Ctrl, все лэйблы и спинбоксы, щелкай правой кнопкой → компоновка → Layout in grid. Создастся новый Layout, который выровняет все виджеты наилучшим образом. Далее выбирай (с Ctrl) этот лэйаут и PushButton, щелкай правой кнопкой → Компоновка → Lay out Horizontally. Ну и напоследок, щелкни по главному виджету правой кнопкой → Layout Vertically. Должно получиться, как на рисунке. Поясняю. Layout'ы — менеджеры компоновки виджетов в Qt, которые автоматически компонуют их и, при изменении размеров главного виджета так же автоматически перестраивают все остальные. Очень удобная и полезная штука в общем. Теперь переименуй спинбоксы, кнопку и GraphicsView следующим образом: Не забудь у спинбоксов сделать минимальные и максимальные значения побольше. Переходим к кодингу. Кода будет немного, это же Qt =) Щелкни по doBtn правой кнопкой → перейти к слоту → clicked(). Откроется редактор кода. Предположим, что нам надо построить график функции y = 2x^2 + 3x – 4. График функции — парабола, ветви вверх. Прописываем в заголовочном файле, в классе в разделе private новый метод - double countY(const double &x). Размер типа double – 8 байт => имеет смысл передавать его по констатной ссылке. В .cpp мы реализуем этот метод: PHP код:
PHP код:
PHP код:
Ищем минимумы и максимумы, а также определяем, где у нас находится точка (0, 0). PHP код:
QGraphicsScene *scene = new QgraphicsScene(ui->graphGV); Рисуем оси PHP код:
PHP код:
PHP код:
Все, приложение строит графики на ура, на его написание у меня ушло около 15 минут, пользовался только мозгом и встроенным хелпом. Если нужно изменить функцию — меняй ее в countY(). Чем меньше будет шаг — тем более гладким будет график, но функция будет считаться дольше. Вопросы и замечания оставляйте в теме. Последний раз редактировалось RankoR; 10.01.2010 в 19:35. |
Плюсанул RankoR : |