简单多边形及其性质

    xiaoxiao2021-03-25  163

    构建简单多边形思路就是找到所有点的中心,然后排序所有点与中间点的极角

    详细算法见http://www.cnblogs.com/andyzeng/p/3754005.html

    (实在不得不说,matlab 的数学函数太强大了)

    注意:主要是几个matlab函数的使用

    1.求所有顶点的中点,用mean() 干净的返回了整个向量每列的均值

    2.atan2()函数求正切角(见上图)

    3.sortrows(),这个函数非常给力,p是代表数组,数字代表从第几行排序

     clear all;clc;  n=30;  p=rand(n,2);  center=mean(p);   angle=atan2(p(:,2)-center(2),p(:,1)-center(1));  p=[p,angle];  p=sortrows(p,3);    hold on;  plot(p(:,1),p(:,2));  p=circshift(p,1);%形成环形区域  plot(p(:,1),p(:,2));  

    求简单多边形顶点的凹凸性

    原理:求顶点与前一顶点,后一顶点的向量,然后对这两个向量做叉乘,接下来比较叉乘的符号

    1.

    2.

    clear;clc; n=20; p=rand(n,2); p=createSimplyPoly(p); hold on; for i=1:n if i==1 v1=p(n,:)-p(1,:); v2=p(2,:)-p(1,:); else if i==n v1=p(n-1,:)-p(n,:); v2=p(1,:)-p(n,:); else v1=p(i-1,:)-p(i,:); v2=p(i+1,:)-p(i,:); end end r=det([v1;v2]); if r>0 plot(p(i,1),p(i,2),'*'); else if r<0 plot(p(i,1),p(i,2),'o'); end end end plot(p(:,1),p(:,2)); hold onl p=circshift(p,1); plot(p(:,1),p(:,2));%可以使得多边形闭合 function p=createSimplyPoly(p) center=mean(p); angle=atan2(p(:,2)-center(2),p(:,1)-center(1)); p=[p,angle]; p=sortrows(p,3); p=p(:,1:2); end

    转载请注明原文地址: https://ju.6miu.com/read-24517.html

    最新回复(0)