湖南省第十二届大学生计算机程序设计竞赛$J$题

计算几何。

#pragma comment(linker, "/STACK:1024000000,1024000000")
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<vector>
#include<map>
#include<set>
#include<queue>
#include<stack>
#include<iostream>
using namespace std;
typedef long long LL;
const double pi=acos(-1.0),eps=1e-;
void File()
{
freopen("D:\\in.txt","r",stdin);
freopen("D:\\out.txt","w",stdout);
}
template <class T>
inline void read(T &x)
{
char c = getchar();
x = ;
while(!isdigit(c)) c = getchar();
while(isdigit(c))
{
x = x * + c - '';
c = getchar();
}
} const int maxn=;
const int maxisn=; int dcmp(double x)
{
if(x>eps) return ;
return x<-eps ? - : ;
}
inline double Sqr(double x)
{
return x*x;
}
struct Point
{
double x,y;
Point()
{
x=y=;
}
Point(double x,double y):x(x),y(y) {};
friend Point operator + (const Point &a,const Point &b)
{
return Point(a.x+b.x,a.y+b.y);
}
friend Point operator - (const Point &a,const Point &b)
{
return Point(a.x-b.x,a.y-b.y);
}
friend bool operator == (const Point &a,const Point &b)
{
return dcmp(a.x-b.x)==&&dcmp(a.y-b.y)==;
}
friend Point operator * (const Point &a,const double &b)
{
return Point(a.x*b,a.y*b);
}
friend Point operator * (const double &a,const Point &b)
{
return Point(a*b.x,a*b.y);
}
friend Point operator / (const Point &a,const double &b)
{
return Point(a.x/b,a.y/b);
}
friend bool operator < (const Point &a, const Point &b)
{
return a.x < b.x || (a.x == b.x && a.y < b.y);
}
inline double dot(const Point &b)const
{
return x*b.x+y*b.y;
}
inline double cross(const Point &b,const Point &c)const
{
return (b.x-x)*(c.y-y)-(c.x-x)*(b.y-y);
} }; Point LineCross(const Point &a,const Point &b,const Point &c,const Point &d)
{
double u=a.cross(b,c),v=b.cross(a,d);
return Point((c.x*v+d.x*u)/(u+v),(c.y*v+d.y*u)/(u+v));
}
double PolygonArea(Point p[],int n)
{
if(n<) return 0.0;
double s=p[].y*(p[n-].x-p[].x);
p[n]=p[];
for(int i=; i<n; i++)
{
s+=p[i].y*(p[i-].x-p[i+].x);
}
return fabs(s*0.5);
}
double CPIA(Point a[],Point b[],int na,int nb)
{
Point p[maxisn],temp[maxisn];
int i,j,tn,sflag,eflag;
a[na]=a[],b[nb]=b[];
memcpy(p,b,sizeof(Point)*(nb+));
for(i=; i<na&&nb>; ++i)
{
sflag=dcmp(a[i].cross(a[i+],p[]));
for(j=tn=; j<nb; ++j,sflag=eflag)
{
if(sflag>=) temp[tn++]=p[j];
eflag=dcmp(a[i].cross(a[i+],p[j+]));
if((sflag^eflag)==-)
temp[tn++]=LineCross(a[i],a[i+],p[j],p[j+]);
}
memcpy(p,temp,sizeof(Point)*tn);
nb=tn,p[nb]=p[];
}
if(nb<) return 0.0;
return PolygonArea(p,nb);
}
double SPIA(Point a[],Point b[],int na,int nb)
{
int i,j;
Point t1[],t2[];
double res=0.0,if_clock_t1,if_clock_t2;
a[na]=t1[]=a[];
b[nb]=t2[]=b[];
for(i=; i<na; i++)
{
t1[]=a[i-],t1[]=a[i];
if_clock_t1=dcmp(t1[].cross(t1[],t1[]));
if(if_clock_t1<) swap(t1[],t1[]);
for(j=; j<nb; j++)
{
t2[]=b[j-],t2[]=b[j];
if_clock_t2=dcmp(t2[].cross(t2[],t2[]));
if(if_clock_t2<) swap(t2[],t2[]);
res+=CPIA(t1,t2,,)*if_clock_t1*if_clock_t2;
}
}
return res;
} Point a[],b[];
Point aa[],bb[]; int main()
{
int n1,n2;
double x1,y1,x2,y2,x3,y3,x4,y4;
while(~scanf("%lf%lf%lf%lf%lf%lf%lf%lf",&x1,&y1,&x2,&y2,&x3,&y3,&x4,&y4))
{
n1=,n2=;
a[].x=x1; a[].y=y1;
a[].x=x1; a[].y=y2;
a[].x=x2; a[].y=y1; b[].x=x3; b[].y=y3;
b[].x=x3; b[].y=y4;
b[].x=x4; b[].y=y4;
b[].x=x4; b[].y=y3; printf("%.6lf\n",abs(SPIA(a,b,n1,n2)));
}
return ;
}

CSU 1812 三角形和矩形的更多相关文章

  1. csu 1812: 三角形和矩形 凸包

    传送门:csu 1812: 三角形和矩形 思路:首先,求出三角形的在矩形区域的顶点,矩形在三角形区域的顶点.然后求出所有的交点.这些点构成一个凸包,求凸包面积就OK了. /************** ...

  2. 使用原生JavaScript的Canvas实现拖拽式图形绘制,支持画笔、线条、箭头、三角形、矩形、平行四边形、梯形以及多边形和圆形,不依赖任何库和插件,有演示demo

    前言 需要用到图形绘制,没有找到完整的图形绘制实现,所以自己实现了一个 - - 一.实现的功能 1.基于oop思想构建,支持坐标点.线条(由坐标点组成,包含方向).多边形(由多个坐标点组成).圆形(包 ...

  3. 计算几何板子题【2019牛客国庆集训派对day7——三角形和矩形】【多边形相交的面积】

    链接:https://ac.nowcoder.com/acm/contest/1112/J来源:牛客网 题目描述 Bobo 有一个三角形和一个矩形,他想求他们交的面积. 具体地,三角形和矩形由 8 个 ...

  4. canvas快速绘制圆形、三角形、矩形、多边形

    想看前面整理的canvas常用API的同学可以点下面: canvas学习之API整理笔记(一) canvas学习之API整理笔记(二) 本系列文章涉及的所有代码都将上传至:项目代码github地址,喜 ...

  5. CoreGraphics-基本图形绘制-直线、三角形、矩形、椭圆形、弧形

    框架:CoreGraphics 步骤: 1."获取"图形上下文     let cxtRef = UIGraphicsGetCurrentContext()! 2.添加路径 3.渲 ...

  6. 30.编写一个Shape类,具有属性:周长和面积; 定义其子类三角形和矩形,分别具有求周长的方法。 定义主类E,在其main方法中创建三角形和矩形类的对象, 并赋给Shape类的对象a、b,使用对象a、b来测试其特性。

    package zuoye8; public abstract class Shape { private double zhouchang ; private double mianji ; pub ...

  7. 编写一个Shape类,具有属性:周长和面积; 定义其子类三角形和矩形,分别具有求周长的方法。 定义主类E,在其main方法中创建三角形和矩形类的对象, 并赋给Shape类的对象a、b,使用对象a、b来测试其特性。

    package shape; public class Shape { //定义成员变量 private double zhouchang; private double mianji; public ...

  8. 自定义tabpageindicator,可以自定义tab是三角形还是矩形,但是tab不具有滑动的功能

    我是不会滴,但是看了一些大神写的,我修改了一下,大家可以参照参照 一,自定义Mytabpageindicator,直接贴代码了,具体的在代码中有注释 package com.wangy.mytabpa ...

  9. iOS开发UI-利用Quartz2D 实现基本绘图(画三角形、矩形、圆、圆弧)

    1.画三角形  运行结果如下 1.1具体实现步骤 1.1.1首先新建一个project,然后自定义一个view 1.2代码 #import "htingShapeView.h" @ ...

随机推荐

  1. [Usaco2007 Dec]宝石手镯[01背包][水]

    Description 贝茜在珠宝店闲逛时,买到了一个中意的手镯.很自然地,她想从她收集的 N(1 <= N <= 3,402)块宝石中选出最好的那些镶在手镯上.对于第i块宝石,它的重量为 ...

  2. 10-18 noip提高组模拟赛(codecomb)T2贪心

    T2:找min:一直找最小的那个,直到a[i]-x+1小于0,就找次小的,以此类推: 求max,也是一样的,一直到最大的那个,直到次大的比之前最大的大,就找次大的: 这个模拟,可以用上priority ...

  3. mac 下nginx加入开机启动

    通过brew install nginx后设置开机启动项 sudo cp /usr/local/opt/nginx/*.plist /Library/LaunchDaemonssudo launchc ...

  4. JavaScript修改Canvas图片

    用JavaScript修改Canvas图片的分辨率(DPI)   应用场景: 仓库每次发货需要打印标签, Canvas根据从数据库读取的产品信息可以生成标签JPG, 但是这个JPG图片的默认分辨率(D ...

  5. 不容易理解的 lock 和 merge

    Hibernate:不容易理解的 lock 和 merge 目录 背景Lock官方的注释LockMode.NONELockMode.READLockMode.UPGRADEMerge官方注释detac ...

  6. 测试Data ORM的性能

    闲着无聊,测试了一下公司ORM的性能,和其它的ORM相比,该有的都有了,不该有的也勉强塞了进去,总体考虑是并发与扩展性问题,譬如读写分离,消息总线服务整合,缓存内置. 测试机是I7,16G内存,这里只 ...

  7. Define Constraints That Are Minimal and Sufficient 设定不多不少的约束

    Define Constraints That Are Minimal and Sufficient 设定不多不少的约束   今天第二章第二节. 主管不在,然后暂时没什么任务,把第二节看了,然后整理一 ...

  8. hdu2837数论

    http://acm.hdu.edu.cn/showproblem.php?pid=2837 // a^b%p=a^(b%phi(p)+phi(p))%p #include<iostream&g ...

  9. hdu 2444

    这道题要先判断图是不是二分图,如果不是的话,就直接输出No,是的话就求最大匹配, 建边是双向的所以要/2 判断二分图:对点进行染色,如果A与B认识,A,B的颜色要不同, 如果出现颜色相同的就矛盾了,就 ...

  10. [置顶] iOS学习笔记47——图片异步加载之EGOImageLoading

    上次在<iOS学习笔记46——图片异步加载之SDWebImage>中介绍过一个开源的图片异步加载库,今天来介绍另外一个功能类似的EGOImageLoading,看名字知道,之前的一篇学习笔 ...