我有一个网格定义为
[X, Y, Z] = meshgrid(-100:100, -100:100, 25); % z will have more values later
Run Code Online (Sandbox Code Playgroud)
和两种形状(椭圆形,在这种情况下):
x_offset_1 = 40;
x_offset_2 = -x_offset_1;
o1 = ((X-x_offset_1).^2./(2*Z).^2+Y.^2./Z.^2 <= 1);
o2 = ((X-x_offset_2).^2./(2*Z).^2+Y.^2./Z.^2 <= 1);
Run Code Online (Sandbox Code Playgroud)
现在,我想找到在非零的所有点或者椭圆形.我试过了
union = o1+o2;
Run Code Online (Sandbox Code Playgroud)
但由于我只是添加它们,重叠区域的值将为2而不是所需的值1.
如何将矩阵中的所有非零条目设置为1,而不管它们之前的值是什么?
(我试过normalized_union = union./union;
,但后来我最终得到NaN
所有0个元素,因为我除以零......)
第一个建议:不要union
用作变量名,因为这会影响内置函数union
.我建议使用变量名称,inEitherOval
因为它更具描述性......
现在,你有一个选择是做一些像abcd建议你添加矩阵的东西o1
,o2
并使用不等于运算符的关系:
inEitherOval = (o1+o2) ~= 0;
Run Code Online (Sandbox Code Playgroud)
同一静脉中的其他几种可能性使用逻辑not
运算符或函数logical
:
inEitherOval = ~~(o1+o2); % Double negation
inEitherOval = logical(o1+o2); % Convert to logical type
Run Code Online (Sandbox Code Playgroud)
但是,最简洁的解决方案是将逻辑or
运算符直接应用于o1
和o2
:
inEitherOval = o1|o2;
Run Code Online (Sandbox Code Playgroud)
这将导致值为1,其中矩阵为非零,否则为零.