matlab提取矩阵中点的坐标

比如我有一个100*100的矩阵,现在有四个点,下标分别是(1,1),(1,5),(100,10),(100,14),四个点连线可以构成一个平行四边形,如果矩阵中的点的下... 比如我有一个100*100的矩阵,现在有四个点,下标分别是(1,1),(1,5),(100,10),(100,14),四个点连线可以构成一个平行四边形,如果矩阵中的点的下标落在这个四边形里(含边界),就取出它的坐标,最后得到一个坐标的集合,该怎么编程。请大侠指教,并把程序贴上来学习一下,谢谢! 展开
 我来答
吓栋栋
推荐于2018-03-29 · TA获得超过2832个赞
知道小有建树答主
回答量:386
采纳率:100%
帮助的人:194万
展开全部

楼上的方法挺高深的,但是我实验了。发现有“漏网之鱼”。

我将我办法和他的对比了一下,如下图:

可以看出,用楼上的方法解,行坐标为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’的是判断在区域内的点。效果还是比较理想的。

代码在附件中。

dukinkin
2014-02-28 · TA获得超过1.3万个赞
知道大有可为答主
回答量:2444
采纳率:90%
帮助的人:923万
展开全部
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就可以判断点是否在凸多边形内

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式