Что является простым / легким способом * построить * std :: vector <double>? - PullRequest
3 голосов
/ 21 июня 2011

Я ищу что-то вроде:

 std::vector<double> X = some_math_function( );
 somenamespace :: plot(  Wrapper( X ) ); // pop-up and display a graph of X on y-axis, 1 to X.size() on x-axis. 

Очевидно, что существуют более тяжелые методы, такие как настройка gnu-plot или чего-то еще, и я использовал этот материал в диаграммах VTK. Я просто хочу, чтобы появился глупый гетто-сюжет. Это для грубой отладки, проверяющей вещи типа "вектор даже меняется? Внезапно ли он дергается, когда я двигаю камеру?" и так далее.

Ответы [ 5 ]

6 голосов
/ 21 июня 2011

Если это для отладки, почему бы просто не вывести вектор в файл с разделителями и построить в Excel или gnuplot или как-то как отдельный шаг?просто напишите файл в любом удобном вам инструменте, например,

gnuplot
plot "myfile" with lines
3 голосов
/ 21 июня 2011

В этой теме , кажется, есть несколько предложений по этому вопросу. Я не видел ничего, что выделялось бы как простая библиотека для тех целей, которые вы хотите.

Вот несколько простых примеров, но мне кажется, что если вам нужно выучить достаточно, чтобы выдержать любую библиотеку, вы также можете поднять уважаемую библиотеку, такую ​​как gnuplot. Во многих случаях время, которое вы теряете, имея дело с более сложной библиотекой, более чем компенсируется поддержкой сообщества и (относительной) безошибочностью ... более ... более зрелого продукта.

koolplot

GOBLIN

2 голосов
/ 16 июля 2011

Вы можете использовать MathGL (библиотека кроссплатформенных графиков GPL). Код выглядит как

mglGraphZB gr;// create canvas
mglData d; d.Set(X);  // convert to internal format
gr.YRange(d); // set range for y-axis
gr.Plot(d);   // plot it
gr.Axis();    // draw axis if you need
gr.WritePNG("1.png"); // save it
0 голосов
/ 11 июля 2019

Использование C ++ 11: я бы рекомендовал использовать matplotlibcpp , который использует python для графиков.Библиотека ДЕЙСТВИТЕЛЬНО проста в использовании, и вам нужно только скопировать файл заголовка в вашем хранилище.

Код будет выглядеть так:

#include "matplotlibcpp.h"
#include <vector>
#include <algorithm> // for std::iota

int main()
{
  std::vector <double> y = {0.1, 0.2, 0.4, 0.8, 1.6};
  std::vector <int> x(y.size());
  std::iota(x.begin(), x.end(), 0);

  matplotlibcpp::plot(x, y);
  matplotlibcpp::show();
  plt::save("plot.png");
}

В вашем cmake:

find_package(PythonLibs 2.7)
target_include_directories(myproject PRIVATE ${PYTHON_INCLUDE_DIRS})
target_link_libraries(myproject ${PYTHON_LIBRARIES})

Или передайте его непосредственно вашему компилятору:

g++ main.cpp -std=c++11 -I/usr/include/python2.7 -lpython2.7
0 голосов
/ 21 июня 2011

Я помню, как легко было строить кривые с gd в php, но это было давно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...