杭电OJ(HDOJ)2036题:改革春风吹满地(几何,数学公式)

来源:互联网 发布:网络专科文凭有用吗 编辑:程序博客网 时间:2024/04/27 19:04

题意:

输入数据包含多个测试实例,每个测试实例占一行,每行的开始是一个整数n(3<=n<=100),它表示多边形的边数(当然也是顶点数),然后是按照逆时针顺序给出的n个顶点的坐标(x1, y1, x2, y2... xn, yn),为了简化问题,这里的所有坐标都用整数表示。输入数据中所有的整数都在32位整数范围内,n=0表示数据的结束,不做处理。对于每个测试实例,请输出对应的多边形面积,结果精确到小数点后一位小数。每个实例的输出占一行。

示例输入:

3 0 0 1 0 0 1

4 1 0 0 1 -1 0 0 -1

0

示例输出:

0.5

2.0

错误解决方案:

按逆时针给出若干个顶点的坐标,设有5个顶点,得出以下多边形:

从顶点0出发,有两条线将其分成了(0,1,2)(0,2,3)(0,3,4)三个三角形,只要求出这个三个三角形的面积和就是这个多边形的面积。已知三个顶点求这个这角形的面积用海伦公式:s=sqrt(p*(p-a)*(p-b)*(p-c)),p=(a+b+c)/2

那个问题来了,要是下面这种点是凹进去的,怎么办?


那么看下正确的解决方案。

#include<stdio.h>#include<math.h>typedef struct point{    double x;    double y;}Point;double Area(int a,int b,int c,Point p[100]){    double aa,bb,cc,pp;    aa=sqrt((p[a].x-p[b].x)*(p[a].x-p[b].x)+(p[a].y-p[b].y)*(p[a].y-p[b].y));    bb=sqrt((p[b].x-p[c].x)*(p[b].x-p[c].x)+(p[b].y-p[c].y)*(p[b].y-p[c].y));    cc=sqrt((p[c].x-p[a].x)*(p[c].x-p[a].x)+(p[c].y-p[a].y)*(p[c].y-p[a].y));    pp=(aa+bb+cc)/2.0;    return sqrt(pp*(pp-aa)*(pp-bb)*(pp-cc));}int main(){    Point p[100];    int n,i;    double areaSum;    while(scanf("%d",&n)&&n)    {        areaSum=0;        for(i=0;i<n;i++)            scanf("%lf%lf",&p[i].x,&p[i].y);        for(i=2;i<n;i++)        {            areaSum+=Area(0,i-1,i,p);        }        printf("%.1lf\n",areaSum);    }}


正确解决方案:



#include<stdio.h>#include<math.h>typedef struct point{    double x;    double y;}Point;int main(){    Point p[100];    int n,i;    double areaSum;    while(scanf("%d",&n)&&n)    {        areaSum=0;        for(i=0;i<n;i++)            scanf("%lf%lf",&p[i].x,&p[i].y);        for(i=1;i<n;i++)        {            areaSum+=(p[i-1].x*p[i].y-p[i].x*p[i-1].y)/2.0;//交叉相乘        }        areaSum+=(p[n-1].x*p[0].y-p[0].x*p[n-1].y)/2.0;//首尾交叉相乘        printf("%.1lf\n",areaSum);    }}


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 眼镜金属柄断了怎么办 金属眼镜腿折了怎么办 眼镜腿中间断了怎么办 塑料眼镜腿断了怎么办 眼镜上的螺丝拧不紧怎么办 眼镜的把坏了怎么办 把眼镜坐坏了怎么办 梦见眼镜腿掉了怎么办 眼镜的腿掉了怎么办 眼镜腿的螺丝掉了怎么办 爱大爱眼镜掉腿了怎么办 合金眼镜腿断了怎么办 手关节复位h疼痛怎么办 我叫mt红色卡牌怎么办 星盟冲突qq登录怎么办 汽车雷达下雨一直响怎么办 火山小视频封火力怎么办 电脑被当成矿机怎么办 哥华有线机顶盒反应慢怎么办 电脑绣花机编码器坏了怎么办? 伺服电机开起没有力怎么办 西门子冰箱排水孔堵塞怎么办 数控车床西门子系统卡顿怎么办 手机系统不支持多屏互动怎么办 伺服驱动器系统错误报警怎么办 防雷接地电阻不符合规范怎么办 微信支付风控了怎么办 伺服电机没有配原点开关怎么办 电脑自带游戏打不开怎么办 战地1更新很慢怎么办 客户端提示初始化控件失败怎么办 刺客信条兄弟会存档损坏怎么办 百度不小心点赞怎么办 c盘空间不够了怎么办 百度云打开压缩文件失败怎么办 电脑只有一个c盘怎么办 u盘文件删不了怎么办 在电脑上照片打不开乱码怎么办 win7电脑登录密码忘记了怎么办 三洋电视应用商店打不开怎么办 中兴手机应用商店打不开怎么办