2023年4月15日 星期六

linux mint 上使用 c++ matplotlib 繪圖

1.  c++ matplotlib 實際上是將 python 的 matplotlib 包裝成 c++ 可呼叫的程式介面, 因此要先安裝 python 等相關程式及程式庫,
    繪圖程式介面只要下載一個檔案  matplotlibcpp.h, 可上官網 https://github.com/lava/matplotlib-cpp  看是否有新版本, 再將它複製到 /usr/local/include 或是放在專案程式內
2. 另外還需要安裝 python3-dev   python3-numpy    python3-matplotlib  程式庫
    sudo   apt    install   python3-dev   python3-numpy    python3-matplotlib
3. 編譯方式
    g++  原始程式   -I /usr/include/python3.8  -l  python3.8
4. 參考官網 https://github.com/lava/matplotlib-cpp  編輯一個 c++ 繪圖程式 plot.cpp, 稍微修改一下:
#include "matplotlibcpp.h"
#include <vector>
using namespace std;
namespace plt = matplotlibcpp;
int main() {
    int fs = 5000; // number of samples
    vector<double> x(fs), y(fs);
    for(int i = 0; i < fs; i ++) {
        double theta = 2 * M_PI * i / fs;
        x[i] = 16*sin(theta) * sin(theta)*sin(theta);
        y[i] = 13*cos(theta) - 5*cos(2*theta) - 2*cos(3*theta) - cos(4*theta);
    }
    plt::plot(x, y, "r-"); // x-y plot, red solid line.
    plt::show();
}
備註:
1. 用  g++ 編譯上述 c++ 程式時, 有可能找不到 <Python.h>, 需要將標頭檔案所在目錄及所需聯結的程式庫名稱, 明確告訴編譯程式,
    若已經安裝好 python3.8 的版本, 只要加上參數 -I  標頭目錄及 -l 程式庫名稱,  就能編譯成功:
        g++ plot.cpp -I/usr/include/python3.8 -lpython3.8
2. 用 bash 語法定義一個簡單的 alias, 簡化輸入命令. 但要將原始檔名當參數傳遞, 必須定義函式來呼叫, 在函式內可以使用
    $1 當第一個參數, $2 當第二個參數, 以此類推, 後續接其它固定參數, 定義完後用分號分開, 再以接力方式運行該函式,
    寫成單一行並用括號包起來:
        alias pcc='_gcc() { g++ "$1" -I/usr/include/python3.8 -lpython3.8;}; _gcc'
    但要注意上述 alias 名稱 pcc 與等號 = 之間不能有空格, 之後簡單用 pcc  編譯程式就可以了:
        pcc   plot.cpp   &&   ./a.out

 

沒有留言:

張貼留言

使用 pcie 轉接器連接 nvme SSD

之前 AM4 主機板使用 pcie ssd, 但主機板故障了沒辦法上網, 只好翻出以前買的 FM2 舊主機板, 想辦法讓老主機復活, 但舊主機板沒有 nvme 的界面, 因此上網買了 pcie 轉接器用來連接 nvme ssd, 遺憾的是 grub2 bootloader 無法識...