gpt4 book ai didi

c - 用C语言中的MathGL逐点绘制3D散点图

转载 作者:行者123 更新时间:2023-11-30 17:05:47 28 4
gpt4 key购买 nike

我正在构建粒子模拟,我想使​​用 MathGL 将每个粒子的位置显示为 3D 散点图中的点。在 C 中(不是 C++!)。我在使用 C 接口(interface)时遇到问题。

到目前为止我发现了两个有趣的例子:

  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 与我想要做的很接近,但令人烦恼的是 a 不是仅包含 N 个粒子的线性数组。它还必须采用一个函数来评估 a(z 轴)的值,而我只想手动传递每个点的 z 坐标。

我的数据只是一个一维结构数组,类似于:

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

如何使用 C 中的 MathGL 将这些粒子绘制为 3D(散点)图中的点?我想我必须使用 mgl_dots,但它如何从我的值数组中读取? (我可以使用速度作为颜色编码,但这是可选的)

最佳答案

我关于使用 mgl_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);
}

关于c - 用C语言中的MathGL逐点绘制3D散点图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35089588/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com