题目描述
题目大意:给出n个三角形,求它们并的面积。
题解
求出所有直线的交点,然后按照这些交点的横坐标做扫描线
相邻两条扫描线中间的一定是若干个梯形,面积可以直接用(上底+下底)*高/2计算
但是需要注意的是三角形的一条边和y轴平行的情况,若这条边是三角形的起始边,当前扫描线和下一条扫描线之间的答案应该计算这条边;若这条边是三角形的终止边,当前扫描线和下一条扫描线之间的答案不应该计算这条边,特判就行了
代码
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
using namespace std;
#define N 105
const double eps=1e-12;
const double inf=1e9;
int dcmp(double x)
{
if (x<=eps&&x>=-eps) return 0;
return (x>0)?1:-1;
}
struct Vector
{
double x,y;
Vector(double X=0,double Y=0)
{
x=X,y=Y;
}
bool operator < (const Vector &a) const
{
return x<a.x||(x==a.x&&y<a.y);
}
void read(){
scanf("