0

パーティクル シミュレーションを作成しています。各パーティクルの位置を、 C のMathGL (C++ ではありません) を使用して 3D 散布図にドットとして表示したいと考えています。C インターフェイスに問題があります。

これまでのところ、2 つの興味深い例を見つけました。

  1. 私が望むものに近いと思われるC++の例:http: //mathgl.sourceforge.net/doc_en/Dots-sample.html (ただし、これはC++であり、Cに相当するものを見つけることができませんでした)

  2. これは、ドットを使用して 3D サーフ プロットを作成する C コードです。

    #include <mgl2/mgl_cf.h>
    int main()
    {
            HMGL gr = mgl_create_graph(600,400);
    
            HMDT a,x,y;
            a = mgl_create_data_size(30,40,1);
            x = mgl_create_data_size(30,1,1);
            y = mgl_create_data_size(40,1,1);
            mgl_data_modify(a,"pi*(1-2*x)*exp(-4*y^2-4*(2*x-1)^2)",0);
            mgl_data_fill(x,-1.,1.,'x');
            mgl_data_fill(y,0.,1.,'x');
            mgl_rotate(gr,40.,60.,0.);
            mgl_set_light(gr,1);
            mgl_box(gr,1);
            mgl_surf_xy(gr,x,y,a,".","");
            mgl_delete_data(a);
            mgl_delete_data(y);
            mgl_delete_data(x);
    
            mgl_write_frame(gr,"test.png","");
            mgl_delete_graph(gr);
            return 0;
    }
    

例 2 は私がやりたいことに近いですが、aN 個の粒子だけの線形配列ではないのが面倒です。また、a(z 軸) の値を評価する関数を使用する必要がありますが、各ドットの z 座標を手動で渡したいだけです)。

私のデータは、次のような構造体の 1D 配列です。

struct particle {
    double x, y, z, velocity;
};

C で MathGL を使用して、これらの粒子を 3D (散布) プロットでドットとしてプロットするにはどうすればよいですか? を使用する必要があると思いますmgl_dotsが、値の配列からどのように読み取るのでしょうか? (色分けとして速度を使用することもできますが、これはオプションです)

4

1 に答える 1

1

の使用については正しかったし、データはandmgl_dotsを使用して準備できます。たとえば、次のようになります。mgl_create_data_sizemgl_data_put_val

HMDT z,x,y;
int N = 1000;
x = mgl_create_data_size(N,1,1);
z = mgl_create_data_size(N,1,1);
y = mgl_create_data_size(N,1,1);

for(int i=0; i < N; i++) {
        // Set position of particle[i]
        printf("%lf\n", i/(double) N);
        mgl_data_put_val(x, i/(double) N, i, 0, 0);
        mgl_data_put_val(y, i/(double) N, i, 0, 0);
        mgl_data_put_val(z, i/(double) N, i, 0, 0);
}
于 2016-01-29T20:20:28.573 に答える