Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 如何根据下面的代码绘制for循环?_Matlab_Plot_Flow - Fatal编程技术网

Matlab 如何根据下面的代码绘制for循环?

Matlab 如何根据下面的代码绘制for循环?,matlab,plot,flow,Matlab,Plot,Flow,我有流体通过管子的速度的三维流动数据。我知道管子的直径,并且观察了速度场,找到了管子两端xy平面的场中心。所以我基本上有一条穿过管子中心轴的线。我想计算直径以外的所有数据点。为此,我使用了一个公式,它给出了一个点到三维直线的距离,我在这里找到了mathworld.wolfram.com/point-linedistance 3-Dimensional.html。然后,我创建了一个if语句,该语句声明小于直径的点将为NaN 我对matlab是新手,所以我不知道现在该如何绘制这个图 %% diff

我有流体通过管子的速度的三维流动数据。我知道管子的直径,并且观察了速度场,找到了管子两端xy平面的场中心。所以我基本上有一条穿过管子中心轴的线。我想计算直径以外的所有数据点。为此,我使用了一个公式,它给出了一个点到三维直线的距离,我在这里找到了mathworld.wolfram.com/point-linedistance 3-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 

很高兴为您的
X
Y
Z
提供了解释性名称。我猜它们是流量分量,
diff_轴
是轴坐标?这是一个非常麻烦的符号

在循环中,您要做的是获取点值(
X,Y,Z
),将它们复制到临时常量中,然后将它们设置为
NaN
。但问题是,在MATLAB中通常不逐点绘制。所以像
x\u 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;
%//记住在`.^`中加一个点,用于按entrywise进行数组操作
差动轴磁感应=sqrt(差动轴(1)。^2+差动轴(2)。^2+差动轴(3)。^2);
%//您确定需要包括第三个轴吗?
%//那么它是一个球,不是一个管子
%//创建一个二进制掩码
遮罩=差动轴磁感应<管半径
X(~mask)=NaN;
Y(~mask)=NaN;
Z(~mask)=NaN;
然后,您可以使用或绘制数据

这取决于你想要什么样的绘图——我建议你先浏览一下文档,看看各种可用的可视化效果。