我已将带有网格数据的曲面 2Dmesh 文件导入到 matlab 中。
该网格文件有 3 列:第一列包含节点编号,第二列包含节点的 x 坐标,第三列包含节点的 y 坐标。
我想选择这个圆x²+y² = 4内的节点。将数据文件导入matlab后,我有三个列向量,节点向量,x坐标向量和y坐标向量。
有什么技巧可以强加 x² + y² < 4 条件来做到这一点吗?谢谢。
最佳答案
您可以使用并行扫描三个向量的 for 循环轻松地做到这一点。
首先,您可能需要检查这 3 个向量是否具有相同的长度。比方说x
是 x 坐标的向量 y
是具有 y 坐标和 idx
的向量是带有节点编号的向量。
if(length(x)~=length(y) || length(x)~=length(idx) || length(y)~=length(idx))
error('Vectors must have the same length.');
end
然后您可以继续。
SelectedNodes=[];
for i=1:length(x) %or length(y) or length(idx)...they must have the same length
if(x(i)^2+y(i)^2<4)
SelectedNodes=[SelectedNodes idx(i)];
end
end
现在在SelectedNodes
您拥有位于圆内的节点的 ID,要知道您的圆内有多少个节点,只需评估其长度 ( length(SelectedNodes)
)。
更新:正如 @rayryeng 正确指出的那样,有一种更聪明的方法可以通过使用逻辑索引而不是 for 循环来实现此目的。逻辑索引(用糟糕的话说)给出了逻辑 1
(真实)在 i
-第一个位置如果 i
向量(或矩阵)的第一个元素满足特定条件。否则就会出现逻辑0
(错误的)。按照建议运行,
SelectedNodes=idx(x.^2+y.^2<4)
代码x.^2+y.^2<4
将返回与 x
长度相同的数组(和 y
)包含 1
或0
s 就位 i
取决于 x
中是否有这样的元素和y
满足圆方程。这样的数组将是 idx
的输入这意味着“从idx
中选择标记为true
的值”。最后,这将是存储在 SelectedNodes
中的结果。 .
关于matlab - 用matlab选择网格数据的节点来设置边界条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35311963/