CSU 1812 三角形和矩形
湖南省第十二届大学生计算机程序设计竞赛$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 三角形和矩形的更多相关文章
- csu 1812: 三角形和矩形 凸包
传送门:csu 1812: 三角形和矩形 思路:首先,求出三角形的在矩形区域的顶点,矩形在三角形区域的顶点.然后求出所有的交点.这些点构成一个凸包,求凸包面积就OK了. /************** ...
- 使用原生JavaScript的Canvas实现拖拽式图形绘制,支持画笔、线条、箭头、三角形、矩形、平行四边形、梯形以及多边形和圆形,不依赖任何库和插件,有演示demo
前言 需要用到图形绘制,没有找到完整的图形绘制实现,所以自己实现了一个 - - 一.实现的功能 1.基于oop思想构建,支持坐标点.线条(由坐标点组成,包含方向).多边形(由多个坐标点组成).圆形(包 ...
- 计算几何板子题【2019牛客国庆集训派对day7——三角形和矩形】【多边形相交的面积】
链接:https://ac.nowcoder.com/acm/contest/1112/J来源:牛客网 题目描述 Bobo 有一个三角形和一个矩形,他想求他们交的面积. 具体地,三角形和矩形由 8 个 ...
- canvas快速绘制圆形、三角形、矩形、多边形
想看前面整理的canvas常用API的同学可以点下面: canvas学习之API整理笔记(一) canvas学习之API整理笔记(二) 本系列文章涉及的所有代码都将上传至:项目代码github地址,喜 ...
- CoreGraphics-基本图形绘制-直线、三角形、矩形、椭圆形、弧形
框架:CoreGraphics 步骤: 1."获取"图形上下文 let cxtRef = UIGraphicsGetCurrentContext()! 2.添加路径 3.渲 ...
- 30.编写一个Shape类,具有属性:周长和面积; 定义其子类三角形和矩形,分别具有求周长的方法。 定义主类E,在其main方法中创建三角形和矩形类的对象, 并赋给Shape类的对象a、b,使用对象a、b来测试其特性。
package zuoye8; public abstract class Shape { private double zhouchang ; private double mianji ; pub ...
- 编写一个Shape类,具有属性:周长和面积; 定义其子类三角形和矩形,分别具有求周长的方法。 定义主类E,在其main方法中创建三角形和矩形类的对象, 并赋给Shape类的对象a、b,使用对象a、b来测试其特性。
package shape; public class Shape { //定义成员变量 private double zhouchang; private double mianji; public ...
- 自定义tabpageindicator,可以自定义tab是三角形还是矩形,但是tab不具有滑动的功能
我是不会滴,但是看了一些大神写的,我修改了一下,大家可以参照参照 一,自定义Mytabpageindicator,直接贴代码了,具体的在代码中有注释 package com.wangy.mytabpa ...
- iOS开发UI-利用Quartz2D 实现基本绘图(画三角形、矩形、圆、圆弧)
1.画三角形 运行结果如下 1.1具体实现步骤 1.1.1首先新建一个project,然后自定义一个view 1.2代码 #import "htingShapeView.h" @ ...
随机推荐
- Bootstrap3.0入门学习系列
Bootstrap3.0入门学习系列规划[持续更新] 前言 首先在此多谢博友们在前几篇博文当中给与的支持和鼓励,以及在回复中提出的问题.意见和看法. 在此先声明一下,之前在下小菜所有的随笔文章中, ...
- HashTable
算法打基础——HashTable 这一节主要讲很多方面非常重要的hash table等问题. 由于平时很少用到这些,基本都忘了... 怎样快速的在内存中插入.删除.和搜索呢? 这就需要哈希表了 这一节 ...
- .NET程序集1
谈谈.NET程序集(一) 谈谈.NET程序集(一) The Assembly in .NET by 唐小崇 http://www.cnblogs.com/tangchong 在.NET出现之前, Wi ...
- asp.net mvc4设置area里面使用相同的 Controller 名称并设置area里的页面为起始页
asp.net mvc4设置area里面使用相同的 Controller 名称并设置area里的页面为起始页 1.使用重名controller 在asp.net mvc2以后的版本里面,有了area( ...
- 提高Java代码质量的Eclipse插件之Checkstyle的使用详解
提高Java代码质量的Eclipse插件之Checkstyle的使用详解 CheckStyle是SourceForge下的一个项目,提供了一个帮助JAVA开发人员遵守某些编码规范的工具.它能够自动化代 ...
- MongoDB安装心得
本人纯前端一枚,对于数据库安装各种纠结,出了不少错误,一一列出,方便遇到同样问题的人给以参考,也加深一下自己印象. 故事开始了...Node.js在前端界比较火,由于我也是小小前端,跟随大潮流开始步入 ...
- Chrome使用小技巧-多用户登录、直接打开隐身模式窗口
在开发过程中,有时候需要打开2个chrome,各自登录一个账号来做测试,正常情况下由于同一用户下的chrome共享cookies的原因,是没办法登录2个账号的. 这种情况,可以找到chrome图标,点 ...
- OC之方法的声明实现和调用
1. 类是来描述一群具有相同特征和行为的事物的. 类还有行为. 类的声明 @interface 类名 : NSObject { 属性. } 方法的声明 @end 类的实现. @implementati ...
- asp.net小技巧:保留password模式文本框textbox内的数据不丢失。
在asp.net 2.0环境下,使用textbox,提交到服务器再传回,如果textbox是password模式的,那么textbox内的密码(星号.圆点),就没有了! 一个可行的做法是 : prot ...
- IOS之frame和bounds区别
用最简单的语言来解释就是:setFrame和setBounds都是为了把子view加载到父view上去,但设置的参数坐标系不同,setFrame是该view在父view坐标系统中的位置和大小,setB ...