zoj 1806 This Takes the Cake 计算凸四边形和三角形的面积

题目来源:

http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=806

题意:

凸四边形上 有8个点, 4个顶点 , 和 每2个顶点的中点。经过这8个点的每一条线段,将四边形分成2份,
求这两份面积最近的面积。

分析:  枚举, 每条线段, 计算 一边面积 S(较小), 另一边 面积 s1 = sum - S  ,
  找使 S / S1 最大的 面积, 即可。

代码如下:


double add(double a, double b){
return (fabs(a+b) < EPS * (fabs(a) + fabs(b))) ? 0 : (a + b) ;
}
struct Point{
double x, y ;
Point(){}
Point(double x, double y):x(x),y(y){}
Point operator - (Point p){
return Point(add(x, -p.x) , add(y, -p.y)) ;
}
double operator ^(Point p){
return add(x * p.y , - y * p.x) ;
}
void putout(){
printf("%lf :%lf \n", x , y) ;
}
} po[30];
double area(int s, int e){
double sum = 0.0 ;
for(int i = s ; i < e ; i++){
sum += (po[i]^po[(i+1)] )* 0.5 ;
}
sum += (po[e]^po[s])*0.5 ;
return sum = sum > 0 ? sum : - sum;
}
int main()
{
int i , j, g = 1 ;
double sum , Max , res;
while(1){
for(i = 0 ; i < 7 ; i += 2){
scanf("%lf%lf", &po[i].x, &po[i].y) ;
}
if(!(po[0].x || po[0].y
|| po[2].x || po[2].y
|| po[4].x || po[4].y
|| po[6].x || po[6].y))
break;
Max = 0 ;
res = 0.0 ;
for(i = 1 ; i < 8 ; i+= 2){
po[i].x = (po[i-1].x + po[(i+1)%8].x ) * 0.5;
po[i].y = (po[i-1].y + po[(i+1)%8].y ) * 0.5;
}
sum = area(0 , 7);
for(i = 0 ; i < 8 ; i++){
for(j = i+1 ; j < 8 ; j++){
double S = area(i , j) ;
double S1 = sum - S ;
if(S > S1)
swap(S ,S1);
if(S / S1 > Max)
{
Max = S / S1 ;
res = S ;
}
}
}
printf("Cake %d: %.3lf %.3lf\n" , g++ ,res , sum - res) ;

}
}

zoj 1806 This Takes the Cake 计算凸四边形和三角形的面积

时间: 2024-10-10 14:07:15

zoj 1806 This Takes the Cake 计算凸四边形和三角形的面积的相关文章

利用向量积(叉积)计算三角形的面积和多边形的面积

利用向量积(叉积)计算三角形的面积和多边形的面积: 向量的数量积和向量积: (1)  向量的数量积   (1)  向量的向量积 两个向量a和b的叉积(向量积)可以被定义为: 在这里θ表示两向量之间的角夹角(0° ≤ θ ≤ 180°),它位于这两个矢量 所定义的平面上. 向量积的模(长度)可以解释成以a和b为邻边的平行四边形的面积.求三角形ABC的面积,根据向量积的意义,得到: a=axi+ayj+azk; b=bxi+byj+bzk; a×b=(aybz-azby)i+(azbx-axbz)j

CodeForces 23D Tetragon 给定凸四边形3条同边长的中点求4个顶点 计算几何

题目链接:点击打开链接 题意: 给定3个二维平面上的点 这3个点是一个凸四边形的其中3个中点 且所在的3条边边长相等 问是否存在这样的四边形,若存在则输出四边形顶点 思路: 那个外面的点是一个中点关于另一个中点对称得到的 然后得到一个圆的2条弦,圆心就是4个顶点之一,剩下对称出来即可 #include <stdio.h> #include <string.h> #include <iostream> #include <algorithm> #include

FZU Problem 2148 Moon Game (判断凸四边形)

题目链接 题意 : 给你n个点,判断能形成多少个凸四边形. 思路 :如果形成凹四边形的话,说明一个点在另外三个点连成的三角形内部,这样,只要判断这个内部的点与另外三个点中每两个点相连组成的三个三角形的面积和要与另外三个点组成的三角形面积相同. 中途忘了加fabs还错了好几次 1 //FZU2148 2 #include <cstdio> 3 #include <cstring> 4 #include <iostream> 5 #include <cmath>

经典封装之计算三角形的面积

<!doctype html> <html> <head> <meta charset="utf-8"> <title>计算三角形的面积</title> <script> //创建一个计算三角形 function test(){ var h,d,s; h=5; d=8; s=h*d/2; alert(s); } test(); //活数据 function mj(h,j){ var s; s=h*j/2

【转载】利用向量积(叉积)计算三角形的面积和多边形的面积

向量的数量积和向量积: (1)  向量的数量积   (1)  向量的向量积 两个向量a和b的叉积(向量积)可以被定义为: 在这里θ表示两向量之间的角夹角(0° ≤ θ ≤ 180°),它位于这两个矢量 所定义的平面上. 向量积的模(长度)可以解释成以a和b为邻边的平行四边形的面积.求三角形ABC的面积,根据向量积的意义,得到: a=axi+ayj+azk; b=bxi+byj+bzk; a×b=(aybz-azby)i+(azbx-axbz)j+(axby-aybx)k,为了帮助记忆,利用三阶行

ZOJ 1806 (小数高精度)

题意:八进制小数转化成十进制的小数. 0.d1d2d3 ... dk [8] = 0.D1D2D3 ... Dm [10] 例: 0.75 [8] = 7*8^-1+5*8^-2 = ( 5/8 + 7 ) / 8 = 0.953125 [10] 算法:主要就是实现上面的秦九韶算法. 实现:模拟手算除法: #include<iostream> #include<cstdio> #include<cstring> using namespace std; const in

ArcGIS Engine二次开发——计算shapefile面图层要素的面积

前几天,有个同事问我怎么计算面图层的面积,我也是好久没做AE的事情了,简单的查了查,告诉他用IArea接口.到了下午,他的这个问题依旧没有解决,继续求助于我.我百度了下,没有找到相应的文章,于是我意识到这个简单的事情,可能对于很多接触AE不深的人,真的是非常难得事情.最难的可能是不知道怎么做,就像我的同事一样.我很快就告诉他用IArea接口,他却惊讶的问我"你怎么知道的?",并说他也是查到"似乎是用这个接口",当然这是第一个层次的,属于还没入门,刚刚开始接触AE,所

9.已知三边计算三角形的面积公式

1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <math.h> 4 5 int main() 6 { 7 float a,b,c,s,area; 8 scanf("%f%f%f",&a,&b,&c); 9 s = (a+b+c)/2; //已知三边计算三角形面积公式 10 area = sqrt(s*(s-a)*(s-b)*(s-c)); 11 printf(&qu

Matlab计算多幅遥感影像交集面积占比

一个文件夹中有同一时间不同的遥感影像,有LST NDVI.反射率等,而想要知道这些像元数量相同,填充值和背景值均为nan的影像的交集部分占该影像研究区(已经经过研究区矢量裁剪)的比例,以及不同类别遥感影像的覆盖面积比例,主要目的是想以多种数据交集覆盖面积比例来判断改天是否适合数据反演 1 函数 函数基本结构 function[输出形参表: output1, ...,outptn] = 函数名(输入形参表: input1, ... , inputn) 注释说明部分 函数体代码部分 end 函数名: