matlab提取矩阵中点的坐标

来自:    更新日期:早些时候
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提取矩阵中点的坐标视频

相关评论:
  • 19426824947在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....

  • 19426824947matlab中矩阵中取中间值
    桂治些假如矩阵是A,那么中间值:mediumnumber=median(reshape(A,numel(A),1))

  • 19426824947matlab怎么取出矩阵中的部分元素?
    桂治些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)一、电脑不能启动的原因 系统不承认硬盘 此类故障比较常见,即从硬盘无法...

  • 19426824947有一个4*5矩阵,用MATLAB编程求出其最大值及其所在的位置
    桂治些程序中出错的原因可能是因为第一行结束的分号是中文分号,换成非英文分号就好。MATLAB 中的 max 函数是求最大值的函数。1、如果 A 是向量,则 max(A) 返回 A 的最大值。2、如果 A 为矩阵,则 max(A) 是包含每一列的最大值的行向量。3、如果 A 是多维数组,则 max(A) 沿大小不等于 1 ...

  • 19426824947MATLAB如何提取某一矩阵中某一列的部分数据?
    桂治些提取子矩阵的具体方法是 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...

  • 19426824947matlab,如何找出一个4维矩阵中的第i个元素,
    桂治些用find函数就可以做到,输入参数采用逻辑表达式,求出的结果就可以得到满足逻辑表达式的所有元素的索引值。

  • 19426824947求助Matlab如何找出两个矩阵中相同的元素
    桂治些设A,B为行列数分别相等的两个矩阵。C=(A==B)C为0,1矩阵,等于1的元素位置即A,B相同元素的位置,(0对应不等)

  • 19426824947怎么提取matlab矩阵中的所有数据
    桂治些在matlab中,取出矩阵中某一个值的方法如下: 1、对于二维数组: a(i, j) % 表示取出二维数组a的第 i 行,第 j 列的数据 a(:, j) % 表示取出二维数组a的第 j 列的所有数据 a(i, :) % 表示取出二维数组a的第 i 行的所有数据 2、多维数组的方法 ...

  • 19426824947MATLAB里面怎么提取一个行向量的某几列元素?
    桂治些在MATLAB中,要提取一个行向量的特定列元素,可以按照以下步骤操作:首先,打开MATLAB,创建一个矩阵,例如a=[1 4 6;7 8 9],这将创建一个2x3的矩阵。接着,通过reshape函数将其转换为行向量。输入b=reshape(a,1,6),这里的1表示行数,6表示元素总数,这会将矩阵a的元素展平成一个1行6列的...

  • 19426824947matlab 中如何从两个不同的点坐标矩阵A、B中找出共同所有的点坐标?
    桂治些用for循环,与if语句配合 用A矩阵中每一个点和B矩阵中每一个点比照,返回相同点的坐标啊~~

  • 相关主题精彩

    版权声明:本网站为非赢利性站点,内容来自于网络投稿和网络,若有相关事宜,请联系管理员

    Copyright © 喜物网