题目链接:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1845

给定100个三角形,求三角形面积并。

戴神模板太可怕。直接调用函数秒掉。思路有点繁琐,不大清楚。贴一个代码。

代码:

/* ***********************************************
Author :rabbit
Created Time :2014/7/3 22:46:38
File Name :2.cpp
************************************************ */
#pragma comment(linker, "/STACK:102400000,102400000")
#include <stdio.h>
#include <iostream>
#include <algorithm>
#include <sstream>
#include <stdlib.h>
#include <string.h>
#include <limits.h>
#include <string>
#include <time.h>
#include <math.h>
#include <queue>
#include <stack>
#include <set>
#include <map>
using namespace std;
#define INF 0x3f3f3f3f
#define eps 1e-8
#define pi acos(-1.0)
typedef long long ll;
int dcmp(double x){if(fabs(x)<eps)return 0;return x>0?1:-1;
}
struct Point{double x,y;Point(double _x=0,double _y=0){x=_x;y=_y;}
};
Point operator + (Point a,Point b){return Point(a.x+b.x,a.y+b.y);
}
Point operator - (Point a, Point b){return Point(a.x-b.x,a.y-b.y);
}
Point operator * (Point a,double p){return  Point(a.x*p,a.y*p);
}
Point operator / (Point a,double p){return Point(a.x/p,a.y/p);
}
bool operator < (const Point &a,const Point &b){return a.x<b.x||(a.x==b.x&&a.y<b.y);
}
bool operator == (const Point &a,const Point &b){return dcmp(a.x-b.x)==0&&dcmp(a.y-b.y)==0;
}
double Dot(Point a, Point b){return a.x*b.x+a.y*b.y;
}
double Length(Point a){return sqrt(Dot(a,a));
}
double Angle(Point a,Point b){return acos(Dot(a,b)/Length(a)/Length(b));
}
double angle(Point a){return atan2(a.y,a.x);
}
double Cross(Point a,Point b){return a.x*b.y-a.y*b.x;
}
Point GetLineIntersection(Point p,Point v,Point q,Point w){Point u=p-q;double t=Cross(w,u)/Cross(v,w);return p+v*t;
}
struct polygon{int n;Point p[100];double getarea(){double sum=0;for(int i=0;i<n;i++){sum+=Cross(p[i],p[(i+1)%n]);}return fabs(sum)/2;}bool getdir(){double sum=0;for(int i=0;i<n;i++)sum+=Cross(p[i],p[(i+1)%n]);if(dcmp(sum)>0)return 1;return 0;}
};
struct polygons{vector<polygon> p;polygons(){p.clear();}void push(polygon q){if(dcmp(q.getarea()))p.push_back(q);}vector<pair<double,int> > e;void ins(Point s,Point t,Point X,int i){double r=fabs(t.x-s.x)>eps?(X.x-s.x)/(t.x-s.x):(X.y-s.y)/(t.y-s.y);r=min(r,1.0);r=max(r,0.0);e.push_back(make_pair(r,i));}double polyareaunion(){double ans=0;int c0,c1,c2;for(int i=0;i<p.size();i++)if(p[i].getdir()==0)reverse(p[i].p,p[i].p+p[i].n);for(int i=0;i<p.size();i++){for(int k=0;k<p[i].n;k++){Point &s=p[i].p[k],&t=p[i].p[(k+1)%p[i].n];if(!dcmp(Cross(s,t)))continue;e.clear();e.push_back(make_pair(0.0,1));e.push_back(make_pair(1.0,-1));for(int j=0;j<p.size();j++)if(i!=j){for(int w=0;w<p[j].n;w++){Point a=p[j].p[w];Point b=p[j].p[(w+1)%p[j].n];Point c=p[j].p[(w-1+p[j].n)%p[j].n];c0=dcmp(Cross(t-s,c-s));c1=dcmp(Cross(t-s,a-s));c2=dcmp(Cross(t-s,b-s));if(c1*c2<0)ins(s,t,GetLineIntersection(s,t-s,a,b-a),-c2);else if(!c1&&c0*c2<0)ins(s,t,a,-c2);else if(!c1&&!c2){int c3=dcmp(Cross(t-s,p[j].p[(w+2)%p[j].n]-s));int dp=dcmp(Dot(t-s,b-a));if(dp&&c0)ins(s,t,a,dp>0?c0*((j>i)^(c0<0)):-(c0<0));if(dp&&c3)ins(s,t,b,dp>0?-c3*((j>i)^(c3<0)):c3<0);}}}sort(e.begin(),e.end());int ct=0;double tot=0,last;for(int j=0;j<e.size();j++){if(ct==1)tot+=e[j].first-last;ct+=e[j].second;last=e[j].first;}ans+=Cross(s,t)*tot;}}return fabs(ans)/2;}
};
int main()
{//freopen("data.in","r",stdin);//freopen("data.out","w",stdout);int n;while(~scanf("%d",&n)){polygons ps;double ans=0;for(int i=0;i<n;i++){polygon p1;p1.n=3;for(int j=0;j<p1.n;j++){scanf("%lf%lf",&p1.p[j].x,&p1.p[j].y);}ps.push(p1);}printf("%.2f\n",ps.polyareaunion());}return 0;
}

转载于:https://www.cnblogs.com/xfgnongmin/p/10632720.html

BZOJ 1845三角形面积并相关推荐

  1. python求三角形面积步骤_python算三角形面积

    展开全部 代码如下: #!/usr/bin/python3 # -*- coding:utf-8 -*- """ @author:yaqon @file :shanjia ...

  2. 编程三角形面积公式_三角形面积公式110式(英文版)

    点击上面蓝色文字关注杨志明数学角精华博览8年新课标I.5年新课标II.4年新课标III高考数学真题详细解析16年新课标I.9年新课标II.4年新课标III高考数学真题分类详解2020年高考数学重要专题 ...

  3. Java黑皮书课后题第8章:*8.32(几何:三角形面积)编写一个方法,使用下面的方法头,返回一个三角形的面积。编写一个程序,提示用户输入三角形的三个点,然后显示三角形的面积

    *8.32(几何:三角形面积)编写一个方法,使用下面的方法头,返回一个三角形的面积.编写一个程序,提示用户输入三角形的三个点,然后显示三角形的面积 题目 题目描述与运行示例 破题 代码 题目 题目描述 ...

  4. Java黑皮书课后题第2章:*2.19(几何:三角形面积)编写程序,提示用户输入三角形的三个点(x1, y1)(x2, y2)(x3, y3),然后显示它的面积

    *2.19(几何:三角形面积)编写程序,提示用户输入三角形的三个点横纵坐标值,然后显示它的面积 题目 题目概述 运行示例 思路 代码 如何用嵌套的pow()写出两点距离公式 题目 题目概述 2.19( ...

  5. 2015年第六届蓝桥杯 - 省赛 - Java大学B组 - A. 三角形面积

    三角形面积 如[图1]所示.图中的所有小方格面积都是1. 那么,图中的三角形面积应该是多少呢? 请填写三角形的面积.不要填写任何多余内容或说明性文字. Ideas 这道题跟2018年第九届蓝桥杯 - ...

  6. c#中计算三角形面积公式_看着有点迷的三角形面积计算

    近期国际高中考试很多,今天就分享一道初中自主招生题: 废话不多说直接给详解,看完大家也可以想想如果是其它等分点我们是不是也可以用类似的方法算出来. [详解] 连结DF,如下图所示: 可知, (可以用比 ...

  7. 利用等积变换巧解三角形面积问题

    正方形 ABCD 和 正方形 CEFG 中,BCE 在同一直线上,阴影三角形面积为 8,求正方形 ABCD 面积为多少? 解:做辅助线 CF. 因为 ∠DBC = ∠FCE = 45°,所以线段 DB ...

  8. 2015蓝桥杯省赛---java---B---1(三角形面积)

    题目 三角形面积 解法 数学方法,直接求三角形的面积 88 - (82)/2 - (46)/2 - (84)/2 = 64 - (8+12+16) = 64 - 36 = 28 答案 28

  9. 怎么用c语言做出等妖三角形_初二数学培优,怎么用顶点坐标求三角形面积?割补法这样用很简单...

    点击右上角关注"陈老师初中数理化"分享学习经验,一起畅游快乐的学习生活. 根据顶点坐标求解三角形的面积是初二数学的重要知识点,本文就例题详细解析这类题型的解题思路,希望能给初二学生 ...

最新文章

  1. IOS学习博客不错的大部分是原创
  2. Vivado 随笔(1) 综合属性之 ram_style rom_style?
  3. 抖音右上角一个小黄点是什么_抖音用户更喜欢什么样的人设?抖音怎么塑造出一个受人喜欢的人设?抖音人设...
  4. 单目标识别下的以中心点定位为目标值的yolo改进算法措施
  5. 【NLP】Transformer的中年危机?
  6. cocos2d-x游戏开发(一)开始菜单
  7. 做这个AI项目面试通过率达95%
  8. Java高级面试题解析(二):百度Java面试题前200页(精选)
  9. java开发_eclipse导出为war文件,热部署到tomcat运行总结[转]
  10. “云湖共生 • 数智未来”数据湖应用实践白皮书重磅发布
  11. 关于#pragma warning 用法的研究
  12. ArcGIS 10.7安装包及手把手安装教程
  13. 基于飞桨实现BigGAN生成动漫图像——为艺术创作赋能
  14. 人大金仓数据库Docker部署
  15. 服务器硬盘坏道修复教程视频,硬盘坏道修复工具使用教程
  16. python中访问列表元素具体格式_Python3基础 list 访问列表中的列表的元素
  17. 十分钟搭建自己的QA问答社区
  18. 文件锁(二)——文件锁的读锁和写锁
  19. Tomcat与JDK版本对应关系,Tomcat各版本特性,鸟哥linux视频教程
  20. [反汇编练习] 160个CrackMe之023

热门文章

  1. hadoop fs 运维常用的几个命令
  2. windows下部署免费ssl证书(letsencrypt)
  3. SU suspecfk命令学习
  4. LINQ to JavaScript
  5. Gearman 启动日志文件提示协议出错的BUG
  6. Delphi XE2 之 FireMonkey 入门(26) - 数据绑定: TBindingsList: TBindExprItems
  7. 安装 PrestaShop 1.6 - 详细的安装指南
  8. ASP.NET Core 2加入了Razor页面特性
  9. 《游戏视频主播手册》——2.2 哪些人适合做游戏主播
  10. CodePlex关闭,建议迁移至GitHub