Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.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 如何对矩形(边框)复选框内的成对点进行矢量化?_Matlab_Geometry_Vectorization - Fatal编程技术网

Matlab 如何对矩形(边框)复选框内的成对点进行矢量化?

Matlab 如何对矩形(边框)复选框内的成对点进行矢量化?,matlab,geometry,vectorization,Matlab,Geometry,Vectorization,p是m点([xy])的m*2矩阵,R是n矩形([X1 Y1 X2 Y2])的n*4矩阵。我想形成一个m*n矩阵,C,以C(I,j)指示P中的第I个点是否位于R中的第j个矩形内 单点单矩形: 这是检查点是否位于矩形内的方法: c = (P(1)>=R(1))&(P(1)<=R(3))&(P(2)>=R(2))&(P(2)<=R(4)); 多点多矩形: 很容易管理m*1和1*n案例()。但我不知道如何向量化m*ncase。我目前正在使用for循环执行

p
m
点(
[xy]
)的
m*2
矩阵,
R
n
矩形(
[X1 Y1 X2 Y2]
)的
n*4
矩阵。我想形成一个
m*n
矩阵,
C
,以
C(I,j)
指示
P
中的第I个点是否位于
R
中的第j个矩形内

单点单矩形:

这是检查点是否位于矩形内的方法:

c = (P(1)>=R(1))&(P(1)<=R(3))&(P(2)>=R(2))&(P(2)<=R(4));
多点多矩形:

很容易管理
m*1
1*n
案例()。但我不知道如何向量化
m*n
case。我目前正在使用for循环执行此操作:

m = size(P, 1);
n = size(R, 1);
C = false(m, n);
for i=1:n
    C(:, i) = (P(:, 1)>=R(i, 1))&(P(:, 1)<=R(i, 3))& ...
        (P(:, 2)>=R(i, 2))&(P(:, 2)<=R(i, 4));
end
m=尺寸(P,1);
n=尺寸(R,1);
C=假(m,n);
对于i=1:n

C(:,i)=(P(:,1)>=R(i,1))&(P(:,1)=R(i,2))&(P(:,2)

我建议您分别处理

P
R
的每一列,然后在末尾按位处理它们:

Px = P(:,1);
Rx1 = R(:,1).';
Rx2 = R(:,3).';

X1 = bsxfun(@ge, Px, Rx1);
X2 = bsxfun(@le, Px, Rx2);


Py = P(:,2);
Ry1 = R(:,2).';
Ry2 = R(:,4).';

Y1 = bsxfun(@ge, Py, Ry1);
Y2 = bsxfun(@le, Py, Ry2);

C = X1 & X2 & Y1 & Y2
或者,如果您愿意:

C = bsxfun(@ge, P(:,1), R(:,1).')& ...  % X lower bound
    bsxfun(@le, P(:,1), R(:,3).')& ...  % X upper bound
    bsxfun(@ge, P(:,2), R(:,2).')& ...  % Y lower bound
    bsxfun(@le, P(:,2), R(:,4).');      % Y upper bound

OP提供了这个时间比较

Px = P(:,1);
Rx1 = R(:,1).';
Rx2 = R(:,3).';

X1 = bsxfun(@ge, Px, Rx1);
X2 = bsxfun(@le, Px, Rx2);


Py = P(:,2);
Ry1 = R(:,2).';
Ry2 = R(:,4).';

Y1 = bsxfun(@ge, Py, Ry1);
Y2 = bsxfun(@le, Py, Ry2);

C = X1 & X2 & Y1 & Y2
C = bsxfun(@ge, P(:,1), R(:,1).')& ...  % X lower bound
    bsxfun(@le, P(:,1), R(:,3).')& ...  % X upper bound
    bsxfun(@ge, P(:,2), R(:,2).')& ...  % Y lower bound
    bsxfun(@le, P(:,2), R(:,4).');      % Y upper bound