Anonymous 发表于 2023-4-23 13:39:30

正方体离散化,点源坐标

怎么用matlab把一个正方体的六个面离散化,然后储存到矩阵里?

机器人Gpt 发表于 2023-4-23 13:44:06

qianchezi 发表于 2023-04-23 13:43
但上述代码运行后只有一个点啊

非常抱歉,我的代码有误。以下是修正后的示例代码:

% 正方体边长
L = 1;
% 离散化步长
step = 0.1;
% 生成正方体网格点
= meshgrid(-L/2:step:L/2,-L/2:step:L/2,-L/2:step:L/2);
% x方向的面
x_face = x(:,1:end,end);
% y方向的面
y_face = y(1:end,:,end);
% z方向的面
z_face = z(:,:,1);
% 三个面上的所有点储存在矩阵里
all_points = ;

在上述代码中,我修正了网格点生成部分的代码以及对应的三个面的筛选部分,同时将三个面上的所有点储存在了一个矩阵中。请您再次尝试运行这份修正后的代码看看能否得到正确的结果。
--- 光学专家Gpt

机器人Gpt 发表于 2023-4-23 13:39:50

可以使用matlab中的meshgrid函数来生成正方体点阵,然后根据坐标轴位置进行筛选。

以下是一个示例代码,假设正方体的边长为1,离散化后每个面取10个点:

% 正方体边长
L = 1;

% 离散化步长
step = 0.1;

% 生成正方体网格点
= meshgrid(-L/2:step:L/2,-L/2:step:L/2,-L/2:step:L/2);

% x方向的面
x_face = x(:,1,:);
% y方向的面
y_face = y(1,:,:);
% z方向的面
z_face = z(:,:,1);

% 三个面上的所有点储存在矩阵里
all_points = ;

最后得到的 `all_points` 矩阵的每行分别对应一个点的坐标,可以自由地进行处理和存储。
--- 光学专家Gpt

Anonymous 发表于 2023-4-23 13:43:46

机器人Gpt 发表于 2023-4-23 13:39
可以使用matlab中的meshgrid函数来生成正方体点阵,然后根据坐标轴位置进行筛选。

以下是一个示例代码,假 ...

但上述代码运行后只有一个点啊

Anonymous 发表于 2023-4-23 13:54:24

机器人Gpt 发表于 2023-4-23 13:44
非常抱歉,我的代码有误。以下是修正后的示例代码:



但是最后输出只有121个点,理论上来说应该有11x11x11个点,这里的z的坐标输出错误了

机器人Gpt 发表于 2023-4-23 13:56:57

qianchezi 发表于 2023-04-23 13:54
但是最后输出只有121个点,理论上来说应该有11x11x11 ...

非常抱歉,我的代码还是有误。以下是修正后的示例代码:

% 正方体边长
L = 1;

% 离散化步长
step = 0.1;

% 生成正方体网格点
= meshgrid(-L/2:step:L/2,-L/2:step:L/2,-L/2:step:L/2);

% x方向的面
x_face = x(:,end,:);
x_points = ;
x_points = x_points(abs(x_face(:) - L/2) < step/2, :);

% y方向的面
y_face = y(end,:,:);
y_points = ;
y_points = y_points(abs(y_face(:) - L/2) < step/2, :);

% z方向的面
z_face = z(:,:,1);
z_points = ;
z_points = z_points(abs(z_face(:) + L/2) < step/2, :);

% 所有点的坐标(不包括重复的点)
all_points = unique(, 'rows');

在这份修正后的代码中,我对三个面的筛选代码做了修改。由于离散化过程中精度的问题,我们需要使用差值来确定面上的所有点。在每个面上,我们首先找到所有坐标为 L/2 或 -L/2 的点,然后根据离散化步长进行差值处理,最终得到面上的所有点坐标。然后我们将这些点的坐标合并到一个矩阵中,并去除其中的重复点。在这份代码中,我使用了 unique 函数来去除重复点。

请您再次尝试运行这份修正后的代码,看看能否得到正确的结果。
--- 光学专家Gpt

Anonymous 发表于 2023-4-23 14:10:22

机器人Gpt 发表于 2023-4-23 13:44
非常抱歉,我的代码有误。以下是修正后的示例代码:



怎么把z的所有点也输出来呢?

机器人Gpt 发表于 2023-4-23 14:10:38

qianchezi 发表于 2023-04-23 14:10
怎么把z的所有点也输出来呢?

对于z方向上的面,只需要修改生成网格点的代码即可。具体来说,将`meshgrid`函数中 `-L/2:step:L/2` 中的最后一个元素改为 `L/2-step` 即可实现z方向上所有点的生成。修正后的代码如下:% 正方体边长L = 1;% 离散化步长step = 0.1;% 生成正方体网格点 = meshgrid(-L/2:step:L/2,-L/2:step:L/2,-L/2:step:L/2);% x方向的面x_face = x(:,1:end,end);% y方向的面y_face = y(1:end,:,end);% z方向的面z_face = z(:,:,1:end);% 所有点储存在矩阵里all_points = ,1), reshape(y,[],1), reshape(z,[],1)];在修改后的代码中,我将 `z` 网格点矩阵中的三维索引改为了 `1:end`,从而使得所有z方向上的点都包含在了 `z_face` 和 `all_points` 中。
--- 光学专家Gpt
页: [1]
查看完整版本: 正方体离散化,点源坐标