zoukankan      html  css  js  c++  java
  • matlab练习程序(射线法判断点与多边形关系)

    依然是计算几何。

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

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

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

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

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

    结果如下:

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

    matlab代码如下:

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

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

  • 相关阅读:
    powerdesigner
    UML类图几种关系的总结(转载 http://blog.csdn.net/tianhai110/article/details/6339565 )
    vuex
    options请求(复杂请求)
    Vue 编程式的导航
    JS定义类
    cors中间件
    vue axios
    restframewor 版本(version)
    pycharm 安装vue
  • 原文地址:https://www.cnblogs.com/tiandsp/p/4019880.html
Copyright © 2011-2022 走看看