pro:A的监视区域是一个多边形。 如果A的监视区的内满足到A的距离到不超过到B的距离的K倍的面积大小。K<1

sol:高中几何体经验告诉我们满足题意的区域是个圆,那么就是求圆与多边形的交。

#include<bits/stdc++.h>
#define rep(i,a,b) for(int i=a;i<=b;i++)
using namespace std;
const int maxn=;
const double eps=1e-;
struct point{
double x,y;
point(){}
point(double xx,double yy):x(xx),y(yy){}
};
struct Circle{
point c; double r;
};
double det(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;}
point operator *(point a,double t){ return point(a.x*t,a.y*t);}
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);}
double Length(point A){return sqrt(dot(A,A));}
int dcmp(double x){
if(fabs(x)<eps) return ; if(x<) return -; return ;
}
double TriAngleCircleInsection(Circle C, point A, point B)
{
point OA=A-C.c,OB=B-C.c;
point BA=A-B, BC=C.c-B;
point AB=B-A, AC=C.c-A;
double DOA=Length(OA),DOB=Length(OB),DAB=Length(AB),r=C.r;
if(dcmp(det(OA,OB))==) return ; //,三点一线,不构成三角形
if(dcmp(DOA-C.r)<&&dcmp(DOB-C.r)<) return det(OA,OB)*0.5; //内部
else if(DOB<r&&DOA>=r) //一内一外
{
double x=(dot(BA,BC)+sqrt(r*r*DAB*DAB-det(BA,BC)*det(BA,BC)))/DAB;
double TS=det(OA,OB)*0.5;
return asin(TS*(-x/DAB)*/r/DOA)*r*r*0.5+TS*x/DAB;
}
else if(DOB>=r&&DOA<r)// 一外一内
{
double y=(dot(AB,AC)+sqrt(r*r*DAB*DAB-det(AB,AC)*det(AB,AC)))/DAB;
double TS=det(OA,OB)*0.5;
return asin(TS*(-y/DAB)*/r/DOB)*r*r*0.5+TS*y/DAB;
}
else if(fabs(det(OA,OB))>=r*DAB||dot(AB,AC)<=||dot(BA,BC)<=)//弧
{
if(dot(OA,OB)<){
if(det(OA,OB)<) return (-acos(-1.0)-asin(det(OA,OB)/DOA/DOB))*r*r*0.5;
else return ( acos(-1.0)-asin(det(OA,OB)/DOA/DOB))*r*r*0.5;
}
else return asin(det(OA,OB)/DOA/DOB)*r*r*0.5; //小于90度,以为asin对应的区间是[-90度,90度]
}
else //弧+三角形
{
double x=(dot(BA,BC)+sqrt(r*r*DAB*DAB-det(BA,BC)*det(BA,BC)))/DAB;
double y=(dot(AB,AC)+sqrt(r*r*DAB*DAB-det(AB,AC)*det(AB,AC)))/DAB;
double TS=det(OA,OB)*0.5;
return (asin(TS*(-x/DAB)*/r/DOA)+asin(TS*(-y/DAB)*/r/DOB))*r*r*0.5 + TS*((x+y)/DAB-);
}
}
point a[maxn];
int main()
{
int N,T,Ca=; double K,ans;
while (~scanf("%d%lf",&N,&K)) {
rep(i,,N) scanf("%lf%lf",&a[i].x,&a[i].y);
a[N+]=a[];
point A,B; Circle C;
scanf("%lf%lf",&A.x,&A.y);
scanf("%lf%lf",&B.x,&B.y);
K=K*K;
C.c.x=(B.x-A.x*K)/(-K);
C.c.y=(B.y-A.y*K)/(-K);
double ta=(K*A.x*A.x-B.x*B.x)/(-K);
double tb=pow((K*A.x-B.x)/(-K),);
double tc=(K*A.y*A.y-B.y*B.y)/(-K);
double td=pow((K*A.y-B.y)/(-K),);
C.r=sqrt(ta+tb+tc+td); ans=;
rep(i,,N){
ans+=TriAngleCircleInsection(C,a[i],a[i+]);
}
printf("Case %d: %.10lf\n",++Ca,fabs(ans));
}
return ;
}

HDU - 5130 :Signal Interference (多边形与圆的交)的更多相关文章

  1. HDU 5130 Signal Interference(计算几何 + 模板)

    HDU 5130 Signal Interference(计算几何 + 模板) 题目链接http://acm.hdu.edu.cn/showproblem.php?pid=5130 Descripti ...

  2. hdu 4404 Worms(多边形与圆的交)

    求出爆炸点的坐标,就成了多边形与圆相交面积的模板题了... #include<algorithm> #include<iostream> #include<cstring ...

  3. HDU 5130 Signal Interference --计算几何,多边形与圆的交面积

    题意: 求所有满足PB <= k*PA 的P所在区域与多边形的交面积. 解法: 2014广州赛区的银牌题,当时竟然没发现是圆,然后就没做出来,然后就gg了. 圆的一般式方程: 设A(x1,y1) ...

  4. LA 7072 Signal Interference 计算几何 圆与多边形的交

    题意: 给出一个\(n\)个点的简单多边形,和两个点\(A, B\)还有一个常数\(k(0.2 \leq k < 0.8)\). 点\(P\)满足\(\left | PB \right | \l ...

  5. HDU5130 Signal Interference

    /* HDU5130 Signal Interference http://acm.hdu.edu.cn/showproblem.php?pid=5130 计算几何 圆与多边形面积交 * */ #in ...

  6. AMap编辑折线、多边形、圆

    <!doctype html> <html> <head> <meta charset="utf-8"> <meta http ...

  7. poj3675 求多边形与圆的面积交

    题意:给出多边形的顶点坐标.圆的圆心坐标和半径,求面积交 sol:又是模板题啦= = 注意poj的C++好像认不出hypot函数,要稍微改写一下. hypot(double x,double y):即 ...

  8. C++实现glut绘制点、直线、多边形、圆

    C++实现glut绘制点.直线.多边形.圆 必备环境 glut.h 头文件 glut32.lib 对象文件库 glut32.dll 动态连接库 程序说明 C++实现了用glut画点.画直线.画多边形和 ...

  9. 牛客网暑期ACM多校训练营(第三场)J 多边形与圆相交的面积

    链接:https://www.nowcoder.com/acm/contest/141/J 题目描述 Eddy has graduated from college. Currently, he is ...

随机推荐

  1. Mockito:一个强大的用于Java开发的模拟测试框架

    https://blog.csdn.net/zhoudaxia/article/details/33056093 介绍 本文将介绍模拟测试框架Mockito的一些基础概念, 介绍该框架的优点,讲解应用 ...

  2. Mysql 用户ip访问根据省份查询

    表名:shop_interview_customer 表结构:customerId空为游客模式 interviedId customerId interviewIP iPdetail 1 1001 1 ...

  3. BPTT for multiple layers

    单层rnn的bptt: 每一个时间点的误差进行反向传播,然后将delta求和,更新本层weight. 多层时: 1.时间1:T 分层计算activation. 2.时间T:1 利用本时间点的误差,分层 ...

  4. Win10系列:UWP界面布局进阶1

    全新的Windows 10 操作系统支持多种视图模式,用户可以根据需要选择不同的视图模式显示应用.当用户同时浏览或操作多个应用程序时,可以将应用视图调整为辅屏视图或填充视图,这样在一个屏幕中可以同时对 ...

  5. Vue + Element UI 实现权限管理系统 (管理应用状态)

    使用 Vuex 管理应用状态 1. 引入背景 像先前我们是有导航菜单栏收缩和展开功能的,但是因为组件封装的原因,隐藏按钮在头部组件,而导航菜单在导航菜单组件,这样就涉及到了组件收缩状态的共享问题.收缩 ...

  6. jdk重装后com.sun.tools.javac.Main is not on the classpath的问题 .

    在重装了JDk之后,在编译工程的时候出现如下错误: com.sun.tools.javac.Main is not on the classpath.Perhaps JAVA_HOME does no ...

  7. python 调用zabbix api实现查询主机信息,输出所有主机ip

    之前发现搜索出来的主机调用zabbix api信息都不是那么明确,后来通过zabbix官方文档,查到想要的api信息,随后写一篇自己这次项目中用到的api. #!/usr/bin/env python ...

  8. (C/C++学习笔记) 二十二. 标准模板库

    二十二. 标准模板库 ● STL基本介绍 标准模板库(STL, standard template library): C++提供的大量的函数模板(通用算法)和类模板. ※ 为什么我们一般不需要自己写 ...

  9. node(3)Buffer缓冲区

    buffer 专门用来存放二进制数据的缓冲区:处理文件流 TCP流 const buf = Buffer.from('runoob', 'ascii'); // 创建一个长度为 10.且用 0x1 填 ...

  10. CSS颜色

    CSS 颜色 可以用以下方法来规定 CSS 中的颜色: ·        十六进制色 十六进制值使用三个双位数来编写,并以 # 符号开头. ·        RGB 颜色 o   所有浏览器都支持 R ...