-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCreateNodeCoords3D.m
More file actions
39 lines (36 loc) · 1.62 KB
/
CreateNodeCoords3D.m
File metadata and controls
39 lines (36 loc) · 1.62 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
function coords = CreateNodeCoords3D(n, varargin)
% CreateNodeCoords3D 生成三维空间节点坐标矩阵 (N x 3)
%
% 算法描述:
% 利用线性同余映射原理,将标准超立方体 [0, 1]^3 内的均匀分布随机变量
% 投影至由 [LowerBound, UpperBound] 定义的目标仿射空间。
%
% 参数说明:
% n - 待生成的节点总数
% varargin - 支持两种输入模式:
% 1. 三标量模式: (n, L, W, H) -> 默认起点为 [0, 0, 0]
% 2. 边界矩阵模式: (n, BoundsMat) -> BoundsMat 为 2x3 矩阵 [min_x,y,z; max_x,y,z]
% 1. 动态参数解析与标准化
if nargin == 4
% 模式1:兼容原始输入方式,通过标量构建上界向量
ub = [varargin{1}, varargin{2}, varargin{3}]; % 空间坐标上界
lb = zeros(1, 3); % 空间坐标下界
elseif nargin == 2
% 模式2:处理局部区域边界矩阵
boundsMat = varargin{1};
if isequal(size(boundsMat), [2, 3])
ub = boundsMat(2, :); % 空间坐标上界
lb = boundsMat(1, :); % 空间坐标下界
else
error('边界矩阵必须为 2x3 维度(第一行为最小值,第二行为最大值)。');
end
else
error('输入参数格式错误。请使用 (n, L, W, H) 或 (n, BoundsMat)。');
end
% 2. 核心算法实现:向量化空间映射
% 依据公式:X = lb + rand(n, 3) * (ub - lb)
% 预先计算区间范围向量以减少冗余减法运算
spatialRange = ub - lb;
% 利用隐式扩展生成 N x 3 坐标矩阵
coords = lb + rand(n, 3) .* spatialRange;
end