题目链接:点击这里

直接分解成三角形加起来就好了, 检验一发板子.

#include <cstdio>
#include <cmath>
#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;const double eps = 1e-8;
const double INF = 1e20;
const double pi = acos (-1.0);int dcmp (double x) {if (fabs (x) < eps) return 0;return (x < 0 ? -1 : 1);
}
inline double sqr (double x) {return x*x;}//*************点
struct Point {double x, y;Point (double _x = 0, double _y = 0):x(_x), y(_y) {}void input () {scanf ("%lf%lf", &x, &y);}void output () {printf ("%.2f %.2f\n", x, y);}bool operator == (const Point &b) const {return (dcmp (x-b.x) == 0 && dcmp (y-b.y) == 0);}bool operator < (const Point &b) const {return (dcmp (x-b.x) == 0 ? dcmp (y-b.y) < 0 : x < b.x);}Point operator + (const Point &b) const {return Point (x+b.x, y+b.y);}Point operator - (const Point &b) const {return Point (x-b.x, y-b.y);}Point operator * (double a) {return Point (x*a, y*a);}Point operator / (double a) {return Point (x/a, y/a);}double len2 () {//返回长度的平方return sqr (x) + sqr (y);}double len () {//返回长度return sqrt (len2 ());}Point change_len (double r) {//转化为长度为r的向量double l = len ();if (dcmp (l) == 0) return *this;//零向量返回自身r /= l;return Point (x*r, y*r);}Point rotate_left () {//顺时针旋转90度return Point (-y, x);}Point rotate_right () {//逆时针旋转90度return Point (y, -x);}Point rotate (Point p, double ang) {//绕点p逆时针旋转angPoint v = (*this)-p;double c = cos (ang), s = sin (ang);return Point (p.x + v.x*c - v.y*s, p.y + v.x*s + v.y*c);}Point normal () {//单位法向量double l = len ();return Point (-y/l, x/l);}
};double cross (Point a, Point b) {//叉积return a.x*b.y-a.y*b.x;
}
double dot (Point a, Point b) {//点积return a.x*b.x + a.y*b.y;
}
double dis (Point a, Point b) {//两个点的距离Point p = b-a; return p.len ();
}
double rad_degree (double rad) {//弧度转化为角度return rad/pi*180;
}
double rad (Point a, Point b) {//两个向量的夹角return fabs (atan2 (fabs (cross (a, b)), dot (a, b)) );
}
bool parallel (Point a, Point b) {//向量平行double p = rad (a, b);return dcmp (p) == 0 || dcmp (p-pi) == 0;
}//************直线 线段
struct Line {Point s, e;//直线的两个点Line () {}Line (Point _s, Point _e) : s(_s), e(_e) {}//一个点和倾斜角确定直线Line (Point p, double ang) {s = p;if (dcmp (ang-pi/2) == 0) {e = s + Point (0, 1);}elsee = s + Point (1, tan (ang));}//ax+by+c=0确定直线Line (double a, double b, double c) {if (dcmp (a) == 0) {s = Point (0, -c/b);e = Point (1, -c/b);}else if (dcmp (b) == 0) {s = Point (-c/a, 0);e = Point (-c/a, 1);}else {s = Point (0, -c/b);e = Point (1, (-c-a)/b);}}void input () {s.input ();e.input ();}void adjust () {if (e < s) swap (e, s);}double length () {//求线段长度return dis (s, e);}double angle () {//直线的倾斜角double k = atan2 (e.y-s.y, e.x-s.x);if (dcmp (k) < 0) k += pi;if (dcmp (k-pi) == 0) k -= pi;return k;}
};
//*************多边形double polygon_area (Point *p, int n) {//多边形的有向面积,加上绝对值就是面积//n个点double area = 0;for (int i = 1; i < n-1; i++) {area += cross (p[i]-p[0], p[i+1]-p[0]);}return area/2;
}#define maxn 111
Point p[maxn];
int n;int main () {while (cin >> n && n) {for (int i = 0; i < n; i++) p[i].input ();printf ("%.1f\n", polygon_area (p, n));}return 0;
}

HDU 2036 (平面几何 多边形面积)相关推荐

  1. hdu 2036 计算多边形面积

    叉积 有向面积,不解释了. #include<cstring> #include<cstdio> #include<iostream> using namespac ...

  2. HDU 2036 改革春风吹满地(求多边形面积)

    转载请注明出处:http://blog.csdn.net/u012860063 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2036 改革春风吹满地 ...

  3. HDU 2036 改革春风吹满地 (求多边形面积)

    传送门: 改革春风吹满地 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Tot ...

  4. HDU 2036改革春风吹满地(有向面积的介绍)

    改革春风吹满地 HDU 2036 改革春风吹满地 总体思想是将多边形的面积分成多个三角形进行计算 有向面积计算 运算规则 有向面积适合三角形的已知三角形的各点坐标进行计算的 向量表示的多边形有向面积计 ...

  5. 暑期集训3:几何基础 练习题D:  HDU - 2036 ​​​​​​​

    2018学校暑期集训第三天--几何基础 练习题D  --    HDU - 2036 改革春风吹满地 " 改革春风吹满地,  不会AC没关系;  实在不行回老家,  还有一亩三分地.  谢谢 ...

  6. 求任意多边形面积-有向面积

     给定多边形的顶点坐标(有序),让你来求这个多边形的面积,你会怎么做? 我们知道,任意多边形都可以分割为N个三角形,所以,如果以这为突破点,那么我们第一步就是把给定的多边形,分割为数个三角形,分别 ...

  7. pku 2954 Triangle pku 1265 Area Pick定理的应用 + 叉积求多边形面积

    Pick定理证明:http://translate.google.com/translate?u=http://episte.math.ntu.edu.tw/articles/sm/sm_25_10_ ...

  8. hdu2036(多边形面积)

    Description " 改革春风吹满地,  不会AC没关系;  实在不行回老家,  还有一亩三分地.  谢谢!(乐队奏乐)" 话说部分学生心态极好,每天就知道游戏,这次考试如此 ...

  9. HDU - 1255 覆盖的面积(线段树求矩形面积交 扫描线+离散化)

    链接:线段树求矩形面积并 扫描线+离散化 1.给定平面上若干矩形,求出被这些矩形覆盖过至少两次的区域的面积. 2.看完线段树求矩形面积并 的方法后,再看这题,求的是矩形面积交,类同. 求面积时,用被覆 ...

  10. 多边形面积(Area_Of_Polygons)

    原理: 任意多边形的面积可由任意一点与多边形上依次两点连线构成的三角形矢量面积求和得出. 分析:  由于给出的点是相对于我们的坐标原点的坐标,每个点实际上我们可以当作一个顶点相对于原点的向量,如下图所 ...

最新文章

  1. 中国小孩为何普遍爱吃洋快餐?[转]
  2. oracle怎么关闭约束,Oracle约束enable/disablenovalidate
  3. 湫湫系列故事——消灭兔子
  4. linux主机ftp传输文件效率,FTP和TCP的文件传输效率对比测试分析
  5. 【转】log4net使用详解
  6. python数据图形化—— matplotlib 基础应用
  7. 【每日SQL打卡】​​​​​​​​​​​​​​​DAY 18丨即时食物配送 I【难度简单】​
  8. 计数后打印垂直柱状图(洛谷P1598题题解,Java语言描述)
  9. windbg学习----r?
  10. java 字典 引用_java中数据字典的使用
  11. 面试十大难题的样板回答
  12. WPF Visifire 图表控件
  13. 北京家庭摇号计算机,北京摇号积分计算|2021北京家庭摇号积分怎么算? 北京家庭积分摇号计算 - 有车一族汽车网...
  14. piaget读法_这些手表品牌原来是这么念的!
  15. 微信打飞机小游戏的尝试
  16. 【电脑使用】修改注册表——让有密码的电脑开机自动登录
  17. GridView控件 Image控件 与图片的二进制数据库存储和显示
  18. 有一段时间没来了,总结一下
  19. Solr 特点,为什么要用solr服务,
  20. Centos清理内存 内存回收释放及内存使用查看的相关命令

热门文章

  1. html 输入字数限制,说一说限制字数的输入框踩的坑
  2. python 裁判文书网_中国裁判文书网 爬虫求助
  3. Stream.of()用法示例
  4. ubuntu下听ape音乐
  5. Python--站在巨人肩膀上
  6. 【Love2d从青铜到王者】第八篇:Love2d之多个文件和作用域范围
  7. u盘重置后计算机不显示了,u盘在电脑上不显示了如何恢复
  8. html5置顶标签css样式,html5 header标签 html header css布局教程 /header
  9. 【neo4j】知识图谱实战---构建红楼梦知识图谱
  10. zyf的现状 (BFS+优先队列)