依然是计算几何。

射线法判断点与多边形关系原理如下:

从待判断点引出一条射线,射线与多边形相交,如果交点为偶数,则点不在多边形内,如果交点为奇数,则点在多边形内。

原理虽是这样,有些细节还是要注意一下,比如射线过多边形顶点或射线与多边形其中一边重合等情况还需特别判断。

这里就不特别判断了,因为我只是熟悉原理,并不是实际运用。

好吧,我实际是太懒了,不想判断了。

结果如下:

结果图和线性分类器的组合有几分相似。

matlab代码如下:

clear all;close all;clc;

polyn=;
poly=rand(polyn,);
poly=createSimplyPoly(poly); %创建简单多边形 polyn=polyn+; %连线方便,把第一个点添加到最后一个点后面
poly(polyn,:)=poly(,:); pn=;
p=rand(pn,); hold on;
for i=:pn flag=;
for j=:polyn
x1=poly(j-,); %多边形前后两个点
y1=poly(j-,);
x2=poly(j,);
y2=poly(j,); k=(y1-y2)/(x1-x2); %多边形一条边直线
b=y1-k*x1;
x=p(i,); %过当前点直线和多边形交点
y=k*x+b; if min([x1 x2])<=x && x<=max([x1 x2]) && ... %点同时在射线和多边形边上
min([y1 y2])<=y && y<=max([y1 y2]) && y>=p(i,)
flag=flag+;
end
end if mod(flag,)== %偶数则在外部
plot(p(i,),p(i,),'r.');
else %奇数则在内部
plot(p(i,),p(i,),'g.');
end
end plot(poly(:,),poly(:,));

其中createSimplyPoly函数在这里可以找到。

matlab练习程序(射线法判断点与多边形关系)的更多相关文章

  1. Python 射线法判断一个点坐标是否在一个坐标区域内

    class Point: lng = '' lat = '' def __init__(self, lng, lat): self.lng = lng self.lat = lat # 求外包矩形 d ...

  2. R树判断点在多边形内-Java版本

    1.什么是RTree 待补充 2.RTree java依赖 rtree的java开源版本在GitHub上:https://github.com/davidmoten/rtree 上面有详细的使用说明 ...

  3. LightOj1190 - Sleepwalking(判断点与多边形的位置关系--射线法模板)

    题目链接:http://lightoj.com/volume_showproblem.php?problem=1190 题意:给你一个多边形含有n个点:然后又m个查询,每次判断点(x, y)是否在多边 ...

  4. 射线法(1190 - Sleepwalking )

    题目:http://lightoj.com/volume_showproblem.php?problem=1190 参考链接:https://blog.csdn.net/gkingzheng/arti ...

  5. POJ3182 The Grove[射线法+分层图最短路]

    The Grove Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 904   Accepted: 444 Descripti ...

  6. Cupid's Arrow---hdu1756(判断点与多边形的位置关系 模板)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1756 题意:中文题,套模板即可: /* 射线法:判断一个点是在多边形内部,边上还是在外部,时间复杂度为 ...

  7. Broken line - SGU 124(判断点与多边形的关系)

    题目大意:RT 分析:构造一条射线,如果穿越偶数条边,那么就在多边形外面,如果穿越奇数条边,那么就在多边形里面. 代码如下: ===================================== ...

  8. POJ 2318 TOYS | 二分+判断点在多边形内

    题意: 给一个矩形的区域(左上角为(x1,y1) 右下角为(x2,y2)),给出n对(u,v)表示(u,y1) 和 (v,y2)构成线段将矩形切割 这样构成了n+1个多边形,再给出m个点,问每个多边形 ...

  9. matlab练习程序(SUSAN检测)

    matlab练习程序(SUSAN检测) SUSAN算子既可以检测角点也可以检测边缘,不过角点似乎比不过harris,边缘似乎比不过Canny.不过思想还是有点意思的. 主要思想就是:首先做一个和原图像 ...

随机推荐

  1. ProcDump

    https://technet.microsoft.com/en-us/sysinternals/dd996900.aspx

  2. matlab 之字体调整

    FontWeight {normal} | bold | light | demi

  3. Todd's Matlab讲义第1讲:向量,函数和作图

    向量 Matlab 中最基本的对象是矩阵,向量是特殊的矩阵.行向量是\(1\times n\)矩阵,列向量是\(m\times 1\)矩阵.输入如下行向量: >> v=[0 1 2 3] ...

  4. Firefox渗透测试黑客插件集

    前天看S哥用Firefox的hackbar进行手动注入进行渗透,觉得直接运用浏览器的插件进行渗透测试有很多优点,既可以直接在前端进行注入等操作,也可以省却了寻找各种工具的麻烦.前端还是最直接的!于是这 ...

  5. C++ Set

    set集合容器:实现了红黑树的平衡二叉检索树的数据结构,插入元素时,它会自动调整二叉树的排列,把元素放到适当的位置,以保证每个子树根节点键值大于左子树所有节点的键值,小于右子树所有节点的键值:另外,还 ...

  6. Linux shell判断文件和文件夹是否存在

    shell判断文件,目录是否存在或者具有权限 #!/bin/sh myPath="/var/log/httpd/" myFile="/var /log/httpd/acc ...

  7. 【Hibernate】Hibernate系列3之配置文件详解

    配置文件详解 3.1.配置文件 连接池性能优化:http://www.cnblogs.com/xdp-gacl/p/4002804.html

  8. Plus One Linked List

    Given a non-negative number represented as a singly linked list of digits, plus one to the number. T ...

  9. 获取Ad用户信息

    private];                }                dt.Rows.Add(dr);            }            return dt;        ...

  10. 72 [面试题]如果不使用if-else和比较运算符,你知道如何求解2个数字中的较大一个吗?

    [本文链接] http://www.cnblogs.com/hellogiser/p/max-of-numbers-without-comparations.html [题目] 不使用if-else和 ...