`

凸包。

阅读更多
http://blog.sina.com.cn/s/blog_9dff1a750101ag0l.html


const zero=1e-6; maxn=100000;
type point=record x,y:extended; end;
var p:array[1..maxn]of point;
ch:array[1..maxn]of longint;
temp,n,m,i,j,k:longint;
function sgn(x:extended):longint; inline;
begin
if abs(x)<zero then exit(0);
if x<0 then sgn:=-1 else sgn:=1;
end;
function cross(a,b,c:point):extended; inline;
begin
cross:=(b.x-a.x)*(c.y-a.y)-(b.y-a.y)*(c.x-a.x);
end;
function dist(a,b:point):extended; inline;
begin
dist:=sqr(a.x-b.x)+sqr(a.y-b.y);
end;
function cmp(a,b,c:point):boolean; inline;
var temp:longint;
begin
temp:=sgn(cross(a,b,c));
if temp<>0 then exit(temp<0); {*B}
cmp:=dist(a,b)<dist(a,c); {*A}
end;
begin
assign(input,'Hull.in'); reset(input);
assign(output,'Hull1.out'); rewrite(output);
readln(n);
for i:=1 to n do
begin
readln(p[i].x,p[i].y);
if (j=0)or(p[i].x<p[j].x)or
(sgn(p[i].x-p[j].x)=0)and(p[i].y<p[j].y)
then j:=i;
end;
temp:=j;
while true do
begin
k:=0;
inc(m); ch[m]:=j;
for i:=1 to n do
if (i<>j)and((k=0)or
cmp(p[j],p[k],p[i]))
then k:=i;
if k=temp then break;
j:=k;
end;
for i:=1 to m do
writeln(p[ch[i]].x:0:2,' ',p[ch[i]].y:0:2);
close(input); close(output);
end.
分享到:
评论

相关推荐

    分治法解决凸包问题(C语言实现)

    先预排序,预排序后最左和最右的点肯定是凸包中的点。然后可以递归的从内向外扩展凸包,在当前直线的2侧寻找最高点,最高点肯定在凸包中,这里涉及到一些数学知识: a,首先定义射线p1到p2的左侧:若p1 p2 p构成的...

    三维凸包模板

    三维凸包的模板,三维凸包的模板,三维凸包的模板,三维凸包的模板。

    火焰识别—凸包检测

    火焰的凸包检测,视频放到了根目录下,记得改一下目录。采用的第一个特征是火焰的形状特征。针对空气流以及燃烧物属性会导致火焰形状的持续改变这一特点,我们可以利用这一特性来区别火色移动物体和真实火焰。我们...

    c# WPF实现计算绘制凸包

    vs2013 C# wpf工程实现绘制凸包,用鼠标在界面上生成点,然后通过按钮触发计算凸包的算法,动态绘制凸包。

    凸包问题GraHam算法c++实现

    c++实现的GraHam算法,解决凸包问题

    可视化画凸包

    这种方法要比快包方法的速度快,虽不太完善,但对于5个点以上还是很不错的,达到100000,就是点多的时候,重绘点比较慢,但画出凸包还是挺快的

    Implementation of convex hull.rar_matlab 快速凸包_凸包_凸包 matlab_凸包算法

    实现凸包实现,采用MATLAB编写代码,用于凸包算法的快速实现。

    Graham算法求平面散点集的凸包

    本文参考自算法导论&gt;&gt;章节33.3,利用Graham算法寻找二位平面散点集的凸包,利用OpenGL将计算的结果绘制出来.算法主要利用向量的叉积判断点和线段的位置关系,详见 向量叉积,然后从左下角点按逆时针方向寻找最边缘的线段...

    凸包顶点逆时针排序

    将凸包的顶点按逆时针的顺序排序,代码用java实现,已经亲测验证成功

    用C#编写的凸包算法

    用C#编写的图形界面演示凸包。 private void Form1_MouseClick(object sender, MouseEventArgs e) { g.FillEllipse(bPoint, e.X, e.Y, 5, 5); list.Add(e.Location); } /// /// 凸包算法 /// /// ...

    计算几何求凸包算法的java实现

    计算几何求凸包的java代码,运行可用,可以鼠标任意点击去点,并绘制离散点的最大凸包。

    凸包算法(Graham扫描法)JS实现.js

    采用Graham扫描法,实现提取凸包最小边界JS代码实现。(代码中点坐标采用平面坐标,如要在三维贴地展示,可转换为经纬度坐标)

    qhull求二维凸包的程序

    qhull是一种专门用来求凸包的开源代码,本例演示了如何使用qhull进行二维凸包计算。

    基于凸包算法的二维条码定位 (2008年)

    文中以二维条码Data Matrix为例将计算几何中的凸包概念应用于条码定位,从像素点序列中筛选出凸包顶点以减少待处理像素点的数量。同时利用Data Matrix的定位图形特征设定筛选条件,最终得到用于定位条码区域的凸包...

    凸包面积的计算~~~~

    i++) //凸包 { while(!s.empty()) { t = s.top(); s.pop(); p = ( pot[i].x-s.top().x)*(t.y-s.top().y) - (t.x-s.top().x)*(pot[i].y-s.top().y ); if(p ) { s.push(t); break; ...

    凸包 MFC 两种计算方法 O n*n nlogn

    两种凸包的计算方法,源代码及工程文件,编译测试通过。

    凸包的JarvisMarch算法java实现

    我个人用java写的关于凸包的JarvisMarch算法,也称gift wrapping算法。比较完美,算法的实现很简洁,只有加减乘除的基本运算,程序运行效率很高,计算10万个点的运行时间大概20秒左右。适当增加Point类中的屏幕范围...

    基于C语言的凸包算法实现

    本程序是基于C语言的凸包算法(Graham)实现,能够直接编译运行,计算凸包的点为随机生成。该程序为控制台应用程序,输出结果有凸包顶点坐标、以及一个50*50的矩阵,其中0表示空白点,1表示随机生成的点集,2表示...

    c++算凸包周长

    c++算凸包周长c++算凸包周长c++算凸包周长c++算凸包周长c++算凸包周长

Global site tag (gtag.js) - Google Analytics