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.
分享到:
相关推荐
三维凸包模板 三维凸包模板是计算机科学和几何学中一个重要的概念,它是一种三维几何形体的表达方式。在这个模板中,我们将讨论三维凸包的定义、特点、判断方法和应用。 一、定义 三维凸包是一种三维几何形体,它...
在计算机图形学和几何算法中,"可视化画凸包"是一种重要的技术,它涉及如何高效地确定一组点集的最小外接多边形,即凸包。凸包是由点集中所有点构成的多边形,使得任何从多边形外部到内部的直线段都会穿过多边形的...
凸包算法是计算机科学中的一种重要算法,主要应用于几何计算和数据处理领域。它用于找到一个二维平面上一组点的最小凸多边形,这个多边形包含了所有的点,并且是最小的。在这个场景中,"凸包算法计算随机散点的最小...
先预排序,预排序后最左和最右的点肯定是凸包中的点。然后可以递归的从内向外扩展凸包,在当前直线的2侧寻找最高点,最高点肯定在凸包中,这里涉及到一些数学知识: a,首先定义射线p1到p2的左侧:若p1 p2 p构成的...
在计算机科学和图形学中,凸包(Convex Hull)是一个重要的概念,它是包含所有点的最小凸多边形。在MATLAB中实现凸包算法,可以有效地处理一系列几何问题,如碰撞检测、图像处理和机器学习等。本教程将详细介绍如何在...
在本文中,我们将深入探讨如何使用C#和WPF(Windows Presentation Foundation)技术来实现一个功能,即在用户界面上动态生成点,并通过点击按钮计算并绘制这些点的凸包。我们将详细介绍整个过程,从创建项目到实现...
在计算机科学领域,计算几何是一门研究几何问题的学科,其中“凸包”是一个重要的概念。凸包可以被定义为一个包含所有点的最小凸多边形,即在这个多边形内部,任何两点的线段都完全位于多边形内。在给定的Java程序中...
在计算机科学中,凸包问题是一项基础且重要的算法问题,特别是在几何计算和图形学领域。简单来说,给定一组在二维平面上的点,凸包问题是找到这些点构成的最小凸多边形,使得所有点都在这个多边形内或者在其边界上。...
在计算机图形学和算法设计中,"凸包顶点逆时针排序"是一个常见的问题,尤其是在处理二维几何形状时。凸包(Convex Hull)是指包含所有点且仅包含这些点的最小凸多边形。逆时针排序则是指按照顺时针或逆时针方向对...
在Python编程中,处理几何问题时,有时我们需要计算多边形的凸包和面积。凸包是一组点中所有点连接形成的最小多边形,该多边形包含了所有原始点。本教程将介绍如何使用Python实现这一功能。 首先,凸包的计算通常...
在计算机科学领域,凸包(Convex Hull)是几何学中的一个重要概念,它是指一个包含所有点的最小凸多边形。在这个主题中,我们主要关注两种计算凸包的算法,它们都在MFC(Microsoft Foundation Classes)环境中实现,...
QHull是一款开源的几何计算库,它主要用于计算各种几何对象的边界,如凸包、voronoi图、 delaunay三角剖分等。这个库最初由Steve Russell编写,并且在GNU General Public License下发布,允许用户在遵守相关许可条件...
凸包在计算机科学中是一个重要的几何概念,尤其是在图形学、机器学习和算法设计等领域有着广泛的应用。本项目提供了一个可视化程序,旨在帮助用户直观理解凸包,并能够清晰地绘制出凸包的形状。 凸包(Convex Hull...
在计算机图形学中,"凸包"是一个非常重要的概念,特别是在二维几何处理中。一个凸包可以被定义为一个封闭的二维形状,其中任何从该形状外部到内部的直线段都会穿过形状的边界。在二维空间中,一个点集的凸包是包含...
快速凸包生成算法,也被称为QHull,是一种在计算机科学中用于计算几何问题的高效算法,特别是用于找出一组点集的最小外接多边形,即凸包。这个算法由Barber、Culkin和Kirkpatrick在1996年提出,它基于分治策略,具有...
在计算机科学中,"凸包"(Convex Hull)是一个重要的几何概念,特别是在算法和图形学领域。简单来说,一个凸包是包含在一个二维平面上所有点的最小凸多边形。这个多边形的边界上的每个点都与至少两个其他点相连,...
在计算几何中,"凸包"是一个核心概念,用于描述一个几何对象(如点集)所能形成的最外层边界,使得任何从这个边界外部到内部的直线段都会穿过凸包的边界。这个边界本身就是一个凸多边形,即所有的内角都不超过180度...
火焰的凸包检测,视频放到了根目录下,记得改一下目录。采用的第一个特征是火焰的形状特征。针对空气流以及燃烧物属性会导致火焰形状的持续改变这一特点,我们可以利用这一特性来区别火色移动物体和真实火焰。我们...
在计算机科学中,凸包(Convex Hull)算法是一种重要的几何计算方法,它用于找到一组点在二维或高维空间中的最小凸多边形,这个多边形包含了所有的点。在给定的“编写的凸包算法”项目中,我们可以看到它是由C++语言...
在计算几何领域中,凸包算法是一项基础且具有深远影响的研究课题。它关乎于从一组数据点中构造出一个最小的凸多面体,该多面体能够包围所有给定的点。这一过程在计算机科学以及信息技术等多个领域中扮演着核心角色,...