matlab提取矩阵中点的坐标
设你的数据是a,则程序可这样:
x=a(:,1);y=a(:,2);
[x1,xind]=find(x>=1&&x<=3);
[y2,yind]=find(y>=2&&y<=5);
y1=y(xind);x2=x(yind);
x3=[x1;x2};y3=[y1:y2];
scatter(x3,y3)
[i,j]=find(A==5)
count=length(i)
6和7类似做法
没办法了,不好意思
楼上的方法挺高深的,但是我实验了。发现有“漏网之鱼”。
我将我办法和他的对比了一下,如下图:
可以看出,用楼上的方法解,行坐标为100的,对应的列坐标只有13,14两个点。
而事实上,有10,11,12,13,14共5个点。
而第一行只有(1,1)、(1,2)两个点,事实上,有1到5共5个点
不止第一行和最后一行,中间的每一行都有漏点。
图中,*表示应该包括的点,o表示上述方法包括的点(看不清,就是线的端点之间的点)。
我的方法说起来简单,就是先找到边界直线。然后将所有满足的点找出来。
我定义了一个函数,其说明如下(函数主体在附件中,可以自己看):
function [x1,y1,totalnum] = myarea(a,b,c,d)
%% 该函数返回任意指定上下两边平行的四边形区域,所有在选定区域内点对应的x和y坐标
% 及在区域内点的个数
% 其中x1、y1为区域内所有点的横、纵坐标,为行向量。x,y在向量中对应位置为一组
%totalnum返回区域内点的个数
%a,b,c,d为从左上角开始四边形顺时针给出的四边形顶点
%如下,为一个正确给定的区域:
% a = [1,1];
% b = [1,7];
% c = [9,4];
% d = [9,7];
比如,输入命令如下:
[x,y,num] = myarea([1,1],[1,7],[9,4],[9,7]);
返回的结果我直接用图给你表示吧:
其中红色是指定的端点,写‘1’的是判断在区域内的点。效果还是比较理想的。
代码在附件中。
d=[1 1;
1 5;
100 14; %注意最后两个顺序相反
100 10];
%输入四个顶点,注意让四个顶点按顺序连起来能形成凸多边形
a=[];
for jj=1:100
for ii=1:100
r=[d zeros(4,1)]-repmat([ii jj 0],[4 1]);
%计算4个顶点到ii,jj点的矢量,并加入z座标0
c=cross(r,circshift(r,1),2);%计算相邻矢量的叉乘积
if all(c(:,3)>=0)||all(c(:,3)<=0)%判断所有叉乘积的z分量符号是否相同
a=[a; [ii jj]];%如果相同,记录ii,jj坐标
end
end
end
主要用到判断点是否在凸多边形内的叉乘判断法
首先把要判断的点到多边形的各个角点的矢量求出来
再按顺序依次求相邻两个矢量中间的叉乘
由于点都在xy平面,叉乘结果的矢量肯定在z放向上
如果点在多边形内,那么得到的所有z矢量方向相同,同时大于零或同时小于零
如果刚好在某边所在直线上,对应的z矢量为0
因此判断是否说有z都是>=0或者<=0就可以判断点是否在凸多边形内
matlab提取矩阵中点的坐标视频
相关评论:
桂治些subX=X(a,b)是取矩阵X的a行b列。其中,X表示一个矩阵;X(a,b)表示a行b列的子矩阵。X(a,b)取子矩阵在matlab是一种常用的操作,ab都为向量。比如X(2:4,[2 3 5])表示取矩阵X 第2,3,4行和第2,3,6列交叉的矩阵。举例:>> X=rand(6)X = 0.2769 0.9502 0.1869 0....
桂治些假如矩阵是A,那么中间值:mediumnumber=median(reshape(A,numel(A),1))
桂治些A(50,:)提取的是第50行的元素,A(:,50)提取的是第50列的元素。以下是代码:A=[0 2 3;4 5 6;7 8 9]'B =[ 1 0 1 0 1 0 0 0 0]'k=A(B==1)C=mat2cell(k,sum(B))D=sum(A.*B)一、电脑不能启动的原因 系统不承认硬盘 此类故障比较常见,即从硬盘无法...
桂治些程序中出错的原因可能是因为第一行结束的分号是中文分号,换成非英文分号就好。MATLAB 中的 max 函数是求最大值的函数。1、如果 A 是向量,则 max(A) 返回 A 的最大值。2、如果 A 为矩阵,则 max(A) 是包含每一列的最大值的行向量。3、如果 A 是多维数组,则 max(A) 沿大小不等于 1 ...
桂治些提取子矩阵的具体方法是 B=A(v1,v2),其中,v1表示子矩阵要保留的行号构成的向量,v2表示要保留的列号构成的向量。a(rows,cols),其中rows表示行数,cols表示列数。如a(3,2:4)表示a的第3行第2到4列。例子:>> A=[1:6;2:7;3:8;4:9;5:10;6:11]A(1,:)A(:,1)A = 1 2 3...
桂治些用find函数就可以做到,输入参数采用逻辑表达式,求出的结果就可以得到满足逻辑表达式的所有元素的索引值。
桂治些设A,B为行列数分别相等的两个矩阵。C=(A==B)C为0,1矩阵,等于1的元素位置即A,B相同元素的位置,(0对应不等)
桂治些在matlab中,取出矩阵中某一个值的方法如下: 1、对于二维数组: a(i, j) % 表示取出二维数组a的第 i 行,第 j 列的数据 a(:, j) % 表示取出二维数组a的第 j 列的所有数据 a(i, :) % 表示取出二维数组a的第 i 行的所有数据 2、多维数组的方法 ...
桂治些在MATLAB中,要提取一个行向量的特定列元素,可以按照以下步骤操作:首先,打开MATLAB,创建一个矩阵,例如a=[1 4 6;7 8 9],这将创建一个2x3的矩阵。接着,通过reshape函数将其转换为行向量。输入b=reshape(a,1,6),这里的1表示行数,6表示元素总数,这会将矩阵a的元素展平成一个1行6列的...
桂治些用for循环,与if语句配合 用A矩阵中每一个点和B矩阵中每一个点比照,返回相同点的坐标啊~~