【问题标题】:How would I plot the for loop from my code below?我将如何从下面的代码中绘制 for 循环?
【发布时间】:2014-11-15 11:58:34
【问题描述】:

我有通过管道的流体速度的 3D 流量数据。我知道管子的直径并查看了速度场,并在管子的两端找到了 xy 平面的场中心。所以我基本上有一条穿过管子中心轴的线。我想 NaN 直径之外的所有数据点。为此,我使用了一个方程,它给出了从 3D 线到点的距离,我在这里找到了 mathworld.wolfram.com/Point-LineDistance3-Dimensional.html。然后我创建了一个 if 语句,其中指出小于直径的点将为 NaN。

我是 matlab 新手,所以我不知道现在该如何绘制。

%%

diff_axis = end_axis-start_axis;
diff_axis_mag = (diff_axis(1)^2 + diff_axis(2)^2 + diff_axis(3)^2)^0.5;

[rw col pl] = size(X);

for j = 1:col

    for i = 1:rw

        for k = 1:pl

             x_curr = X(i,j,k);
             y_curr = Y(i,j,k);
             z_curr= Z(i,j,k);

             x0 = [x_curr y_curr z_curr]

             t = - dot((start_axis-x0),(diff_axis))./(diff_axis_mag)^2;

             d = sqrt(((start_axis(1) - x0(1)) + (end_axis(1) - start_end(1))*t)^2 + ((start_axis(2)-x0(2))+(end_axis(2)-start_end(2))*t)^2+((start_axis(3)-x0(3))+(end_axis(3)-start_end(3))*t)^2);

             if (d > D)

                 x_curr=NaN
                 y_curr=NaN
                 z_curr=NaN

             end




        end

    end


end 

【问题讨论】:

  • 取决于你想要什么样的情节——我建议先浏览herehere的文档,了解各种可用的可视化效果。

标签: matlab plot flow


【解决方案1】:

很高兴为您的 XYZ 提供解释性名称。我猜它们是流组件,diff_axis 是轴坐标?这是一个非常麻烦的符号。

您在循环中所做的是获取点值 (X,Y,Z),将它们复制到临时常量,然后如果它们脱落,则将它们设置为 NaN。但问题是您通常不会在 MATLAB 中逐点绘制。所以这些像x_curr 这样的临时工会迷路。 此外,在 MATLAB 中做事的最佳方式是尽可能避免循环。

你可以做的是先创建一个面具

%// remember to put a dot like in `.^` for entrywise array operations
diff_axis_mag = sqrt(diff_axis(1).^2 + diff_axis(2).^2 + diff_axis(3).^2);
%// are you sure you need to include the third axis? 
%// then it is a ball, not a tube

%// create a binary mask
mask = diff_axis_mag < tube_radius

X(~mask) = NaN;
Y(~mask) = NaN;
Z(~mask) = NaN;

然后您可以使用quiver3stream3

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-10
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    • 2023-01-22
    • 1970-01-01
    • 2020-02-18
    相关资源
    最近更新 更多