凸边形外壳

原创 2007年09月18日 21:55:00

凸边形外壳

(输入:convex.in  输出:convex.out

Maxwell是一个顽皮的男孩。

一天,他把又白又干净的墙用墨水弄脏了,这时他的妈妈很快就要回来了。Maxwell想找一块白色的凸多边形去盖住这些墨水点。你能告诉他如何用最小面积的凸多边形来盖住这些墨水点吗?

现在,给出这些墨水点的坐标,你需回答出能盖住所有墨水点的凸多边形使面积最小。

 

输入:

输入的第一行是一个确定的整数TT是测试用例的数量。

每个测试用例的第一行是一个整数N0<N105),N是墨水的点数,随后有N行,第i行包括两整数XiYi(0Xi,Yi<20000)表示第i个墨水点的坐标。整数之间用空格分开。

 

输出:

程序每个测试用例的输出由一行组成,即每个用例输出最小的面积,是一实数,保留小数点后一位。

 

样例输入:

2

4

0 0

1 0

0 1

1 1

2

0 0

0 1

样例输出:

1.0

0.0

import java.io.*
import java.util.*
class point 
...
double x,y; 
boolean bool; 
public point(double x,double y) 
...
  
this.x=x; 
  
this.y=y; 
  bool
=false
}
 
}
 
class Test8 
...
public static void main(String[] args) throws Exception 
...
  BufferedReader bf
=new BufferedReader(new FileReader("convex.in")); 
  
int z=Integer.parseInt(bf.readLine()); 
  
for(int l=0;l<z;l++
  
...
   
int N=Integer.parseInt(bf.readLine());             
   point p[]
=new point[N]; 
   point ch[]
=new point[N]; 
   point stack[]
=new point[N]; 
   String st[]; 
   
for(int j=0;j<N;j++
   
...
    st
=bf.readLine().split(" "); 
    p[j]
=new point(Double.parseDouble(st[0]),Double.parseDouble(st[1])); 
   }
 
   
if(N==1||N==2)System.out.println("0.0"); 
   
else...{     
     Arrays.sort(p, 
      
new Comparator()...
      
public int compare(Object a,Object b)...
       point aa
=(point)a; 
       point bb
=(point)b; 
       
if(aa.x==bb.x) 
        
return aa.y<bb.y?-1:1
       
return aa.x<bb.x?-1:1;}
}
); 
     
     
int top=1;     
     stack[
0]=p[0]; 
     stack[
1]=p[1];               
     p[
0].bool=true
     p[
1].bool=true;     
     
for(int i=2;i<N;i++
        
...
      
while(multiply(p[i],stack[top],stack[top-1])<0
      
...{stack[top].bool=false;top--;if(top==0)break;} 
      stack[
++top]=p[i]; 
      stack[top].bool
=true
     }
     
     top
=N-1;     
     
for(int i=0;i<N;i++
        
...
      
if(p[i].bool==true)continue;       
      stack[top
--]=p[i]; 
     }
     
     top
=1
     ch[
0]=stack[0]; 
     ch[
1]=stack[1];                   
     
for(int i=2;i<N;i++
              
...
              
while(multiply(stack[i],ch[top],ch[top-1])<=0
              
...{top--;if(top==0)break;} 
              ch[
++top]=stack[i]; 
              }
 
     
while(multiply(ch[0],ch[top],ch[top-1])<=0...{top--;if(top==0)break;} 
     System.out.println((
new DecimalFormat("0.0")).format(area(ch,top+1))); 
   }
 
  }
   
}
 
public static double area(point p[],int len) 
...{   
  
int i; 
  
double sum=0;   
  
for( i=0;i<len-1;i++
  sum
+=det(p[i].x,p[i].y,p[i+1].x,p[i+1].y); 
  sum
+=det(p[i].x,p[i].y,p[0].x,p[0].y);   
  
return Math.abs(sum/2); 
}
 
public static double det(double x1,double y1,double x2,double y2) 
...
  
return x1*y2-x2*y1; 
}
 
public static double multiply(point p2,point p1,point p0) 
...
  
return ((p0.x-p1.x)*(p0.y-p2.y)-(p0.x-p2.x)*(p0.y-p1.y)); 
}
 
}
 

凸边形外壳(求凸包面积)

Problem Description Maxwell is a naughty boy. One day, he fouled the white and clean wall with in...
  • xiaofang3a
  • xiaofang3a
  • 2014年07月23日 16:00
  • 286

杭电2108判断凹凸边形

Shape of HDU Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) T...
  • z8110
  • z8110
  • 2015年07月29日 21:23
  • 374

凸边形最优三角剖分

#include "stdio.h" #include "stdlib.h" #include "math.h" #define N 7 //凸边形边数+1int weight[][N]={ ...
  • u012319493
  • u012319493
  • 2015年10月11日 22:23
  • 350

判断点在任意多边形(包括凹凸边形)内

原文链接:点击打开链接 题目地址:http://www.cnblogs.com/try86/archive/2012/04/22/2465416.html 这一题,若点在边上,也将点看做成...
  • PSU_VJD
  • PSU_VJD
  • 2015年12月26日 14:44
  • 490

FZU 2148 Moon Game(判断凸边形(凹边形))

Moon Game Description Fat brother and Maze are playing a kind of special (hentai) game in ...
  • piaocoder
  • piaocoder
  • 2016年06月01日 17:35
  • 288

凸边形最优三角剖分问题

参考博客:草滩小恪的博客园   网址:http://www.cnblogs.com/acm1314/p/4574606.html
  • zyzn1425077119
  • zyzn1425077119
  • 2016年10月29日 22:41
  • 336

OpenGL绘制填充非凸边形

OpenGL没有办法直接绘制非凸多边形,但是可以通过gluTessVertex()这种OpenGL的“细分”的方法对非凸多边形进行绘制。具体原理是: GLUtesselator, 能将任意多边形,...
  • u011450490
  • u011450490
  • 2015年11月18日 21:53
  • 531

一个简单的外壳程序的main历程

在阅读《深入理解计算机操作系统》书的第八章看到这个简单的外壳程序的main,偶尔联想到自己工作中的调试程序,应该和这个实现方式是一样的,可能公司的会用到进程间的通信,但是原型基本都是这样的。具体看代码...
  • jsh13417
  • jsh13417
  • 2013年07月07日 10:59
  • 2484

ssh(安全外壳协议)

SSH 为 Secure Shell 的缩写,由 IETF 的网络工作小组(Network Working Group)所制定;SSH 为建立在应用层和传输层基础上的安全协议。SSH 是目前较...
  • dodohui
  • dodohui
  • 2014年04月15日 09:45
  • 518

关于PCB与设备外壳接地问题

接地问题很多书和文章中都专门论述,然而我的感觉,没有任何一本书或者一篇文章真的把这个问题讲清楚了,因为这问题很复杂,不能一概而论。还有个原因就是写书的人很多都是没什么实际经验,于是就写些只有鬼才能看明...
  • andylauren
  • andylauren
  • 2016年08月14日 13:14
  • 1035
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:凸边形外壳
举报原因:
原因补充:

(最多只允许输入30个字)