matlab练习程序(多边形顶点凹凸性)

生成简单多边形后,有时还需要对多边形各顶点的凹凸性做判断。

先计算待处理点与相邻点的两个向量,再计算两向量的叉乘,根据求得结果的正负可以判断凹凸性。

结果为负则为凹顶点,为正则为凸顶点。

凹顶点用o表示,凸顶点用*表示。

结果如下:

matlab代码如下:

clear all;close all;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,:);       %当前点到后一点向量
    elseif 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
    r=det([v1;v2]);                 %叉乘后第三个向量的方向
    if r>0
        plot(p(i,1),p(i,2),‘*‘);
    elseif r<0
        plot(p(i,1),p(i,2),‘o‘);
    end
end

plot(p(:,1),p(:,2));
p=circshift(p,1);
plot(p(:,1),p(:,2));

createSimplyPoly.m

function p=createSimplyPoly(p)
    cen=mean(p);
    ang=atan2(p(:,1)-cen(1),p(:,2)-cen(2)); %每个点到坐标中心极角

    p=[p,ang];
    p=sortrows(p,3);    %按极角排序

    p=p(:,1:2);
end
时间: 2024-09-30 19:34:05

matlab练习程序(多边形顶点凹凸性)的相关文章

matlab练习程序(射线法判断点与多边形关系)

依然是计算几何. 射线法判断点与多边形关系原理如下: 从待判断点引出一条射线,射线与多边形相交,如果交点为偶数,则点不在多边形内,如果交点为奇数,则点在多边形内. 原理虽是这样,有些细节还是要注意一下,比如射线过多边形顶点或射线与多边形其中一边重合等情况还需特别判断. 这里就不特别判断了,因为我只是熟悉原理,并不是实际运用. 好吧,我实际是太懒了,不想判断了. 结果如下: 结果图和线性分类器的组合有几分相似. matlab代码如下: clear all;close all;clc; polyn=

matlab练习程序(生成黑白网格)

提供了两种生成方法,一个是自己编程实现,比较灵活:另一个是调用系统的checkerboard函数,似乎只能生成8*8网格. 至于用途,也许可以用来下国际象棋. 自己函数生成: 系统函数生成: 代码如下: clear all;close all;clc h=256; w=256; n=8; img=zeros(h,w); flag=1; for y=1:h for x=1:w if flag>0 img(y,x)=255; end if mod(x,int8(w/n))==0 flag=-flag

matlab练习程序(旋转、径向模糊)

还记得过去写过径向模糊,不过当时效果似乎不好. 这次效果还可以,程序中用的算法是: 1.求当前处理点和图像中心点之间的距离r与角度ang; 2.通过对r的修改得到径向模糊. 3.通过对ang的修改得到旋转模糊. 一看代码就能全部明白,不仔细解释了. 原图如下: 处理后效果: matlab代码如下: clear all;close all;clc img=imread('lena.jpg'); [h w]=size(img); imshow(img) imgn=zeros(h,w); for y=

matlab练习程序(弧形投影)

这个其实也算是圆柱体投影了,不过上一篇文章是从正面看,得到的是凸形的结果,而这个是从反面看,得到的是凹形的结果. 计算公式就不写了,大致介绍一下,计算公式中关于x坐标求法和上篇一样,y坐标则正好是上篇公式的反变换,结合上篇公式代码和本篇的代码,应该都不是很难理解的. 下面是hfOV为pi/2时得到的变换结果: 原图: 处理后结果: matlab代码如下: clear all; close all;clc; img=imread('lena.jpg'); [h,w]=size(img); hfOV

atitit.编程语言 程序语言 的 工具性 和 材料性 双重性 and 语言无关性 本质

#---语言的 工具和材料双重性 有的人说语言是个工具,有的人说语言是个材料..实际上语言同时属于两个属性..走跟个光的波粒二重性雅十.. #---语言的工具属性 走跟个对于开发效率最大的影响就是工具... 现今,使用比较广泛的语言主要的c语言系列的.. 按照开发效率次序:: c++<java<groovy<php/c#<Gail框架 作者 老哇的爪子 Attilax 艾龙,  EMAIL:[email protected] 转载请注明来源: http://blog.csdn.ne

(转)matlab练习程序(HOG方向梯度直方图)

matlab练习程序(HOG方向梯度直方图)http://www.cnblogs.com/tiandsp/archive/2013/05/24/3097503.html HOG(Histogram of Oriented Gradient)方向梯度直方图,主要用来提取图像特征,最常用的是结合svm进行行人检测. 算法流程图如下(这篇论文上的): 下面我再结合自己的程序,表述一遍吧: 1.对原图像gamma校正,img=sqrt(img); 2.求图像竖直边缘,水平边缘,边缘强度,边缘斜率. 3.

【转载】matlab练习程序(图像Haar小波变换)

matlab练习程序(图像Haar小波变换) 关于小波变换我只是有一个很朴素了理解.不过小波变换可以和傅里叶变换结合起来理解. 傅里叶变换是用一系列不同频率的正余弦函数去分解原函数,变换后得到是原函数在正余弦不同频率下的系数. 小波变换使用一系列的不同尺度的小波去分解原函数,变换后得到的是原函数在不同尺度小波下的系数. 不同的小波通过平移与尺度变换分解,平移是为了得到原函数的时间特性,尺度变换是为了得到原函数的频率特性. 小波变换步骤: 1.把小波w(t)和原函数f(t)的开始部分进行比较,计算

为顶点程序提供顶点数据

为顶点程序传递顶点信息 Cg / HLSL顶点程序,顶点信息必须通过结构体传递.几个常用的顶点结构被定义在了UnityCG.cginc 文件中.而且在大多数情况下使用它们就足够了. appdata_base:顶点的位置,法线和一个纹理坐标. appdata_tan:顶点的位置,切线,法线和一个纹理坐标. appdata_full:顶点的位置,切线,法线,四个纹理坐标和颜色. 这个材质颜色的网格基于法线和只使用appdata_base顶点程序输入: Shader "VertexInputSimpl

matlab练习程序(波纹扭曲)

其实就是用sin或cos对x,y坐标进行变换,处理的时候依然是反向变换. 类似的,用不同的函数能得到不同的扭曲效果,比如log,1/x,exp等等. 效果如下: 代码如下(还给出了如何生成gif图片的代码): clear all;close all;clc; img=imread('lena.jpg'); [h w]=size(img); wave=[10,100]; %[幅度,周期] newh=h+2*wave(1); neww=w+2*wave(1); rot=0; for i=1:10 i