在 MATLAB 的 for 循环中使用 if 语句

Using the if Statement in a for Loop in MATLAB

我正在做一个项目,我的目标是给 20 条随机生成的所有固定长度的线着色,然后计算所有穿过 y=0 的线并将它们着色为绿色,否则将它们着色为蓝色。 我想出了下面的代码,但它在 if 语句中效果不佳。 有人可以看看吗?如果能帮上忙,谢谢!

问题: 如何更正 if 语句以显示所有行并计算那些穿过 y = 0 的行?

clear
clc
L = 1.5;
a = -5;
b = 5;
GLines = 0:5:5;
m = 0;

for i = 1:20
X1 = rand(1,i)*(b-a)+a;
Y1 = rand(1,i)*(b-a)+a;
Angle = rand(1,i)*360;
X2 = L*cosd(Angle) + X1;
Y2 = L*sind(Angle) + X2;

if X1(i) < L/2* sind(Angle)
m = m + 1;
plot([X1(i); X2(i)],[Y1(i); Y2(i)], '-g');
else
plot([X1(i); X2(i)],[Y1(i); Y2(i)], '-b');
end
       for j = 1:length(GLines)
       axis square
       ylim([-5 5]);
       xlim([-5 5]);
       y = yline(GLines(j));
       end
  end

  disp(m)

如果一条线过零,则Y1和Y2的符号相反,所以你可以这样做:

clear; clc
L = 1.5;
a = -5;
b = 5;
GLines = 0:5:5;
m = 0;

figure;
hold all;
for i = 1:20
    X1 = rand*(b-a)+a; 
    Y1 = rand*(b-a)+a;
    Angle = rand*360;
    X2 = L*cosd(Angle) + X1;
    Y2 = L*sind(Angle) + Y1;
    
    if Y1*Y2 < 0 % if line crosses zero
        m = m + 1;
        c = 'g'; % color = green
    else
        c = 'b'; % color = blue
    end
    plot([X1; X2],[Y1; Y2],'color',c);

end
axis equal
disp(m)

给出了以下情节

并正确输出 m = 2。