惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

GbyAI
GbyAI
博客园 - 三生石上(FineUI控件)
S
Securelist
U
Unit 42
The Cloudflare Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Simon Willison's Weblog
Simon Willison's Weblog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
B
Blog
T
Tenable Blog
The Hacker News
The Hacker News
The Register - Security
The Register - Security
IT之家
IT之家
博客园 - 【当耐特】
Spread Privacy
Spread Privacy
P
Privacy & Cybersecurity Law Blog
博客园_首页
T
Tailwind CSS Blog
人人都是产品经理
人人都是产品经理
C
Cybersecurity and Infrastructure Security Agency CISA
Know Your Adversary
Know Your Adversary
NISL@THU
NISL@THU
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
阮一峰的网络日志
阮一峰的网络日志
T
Tor Project blog
C
CERT Recently Published Vulnerability Notes
Apple Machine Learning Research
Apple Machine Learning Research
Stack Overflow Blog
Stack Overflow Blog
T
Threat Research - Cisco Blogs
T
The Exploit Database - CXSecurity.com
V
Vulnerabilities – Threatpost
A
Arctic Wolf
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
V
V2EX
aimingoo的专栏
aimingoo的专栏
大猫的无限游戏
大猫的无限游戏
Scott Helme
Scott Helme
L
LINUX DO - 热门话题
Cyberwarzone
Cyberwarzone
V
Visual Studio Blog
月光博客
月光博客
爱范儿
爱范儿
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
美团技术团队
G
GRAHAM CLULEY
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
H
Heimdal Security Blog
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO

博客园 - woodfish

偏序集的Dilworth定理 XJOJ历经2个月终于完成啦~~ fork()调用的一个趣题 实现google那种输入框提示的功能 POJ 3691 安徽第二题 有限状态自动机+DP 哈尔滨赛区网络预选赛总结 [计算几何]点集中的点能组成多少个正方形 [计算几何]POJ 1375 点对圆的切线+线段重叠 [计算几何]POJ 1556 判断线段相交+Dijkstra [计算几何] POJ 1873 暴力+凸包 [计算几何]POJ 1266 三角形的外接圆 圆的参数方程 POJ 1026 置换群 [计算几何]POJ2079 求点集中面积最大的三角形 [计算几何]POJ3608 求2个不相交凸包的最短距离 [计算几何]凸包的旋转卡壳算法 C++禁止一个类被继承的技术 C与汇编的接口技术 计算位数的3种方法 避免使用条件分支
[计算几何]POJ 1031 计算点对多边形的偏转角度
woodfish · 2008-09-05 · via 博客园 - woodfish

首先,由于题目可以得到dI=I0*|cosα|*dl*h 

 

其中下,X1,X2为一条边的坐右端点,a为这条边对原点所张的角度
所以实际上本题是要求整个FENCE区域对原点所张开的总角度,
定义FENCE为一有向回路 那么每条边都是有向的。如果按照边的方向对原点所张开的角度为顺时针,那么定义为正,逆时针为负。并且每输入一条边就把本边对原点张开的角度计算进去加到一个数里去那么对于包含原点的区域。这个数应该为正负2∏ ;对于不包含原点的区域,这个数在按边过程中的最大值-最小值就是这个区域对原点所张开的角度。

还有一种情况,那就是区域不包含原点,但是总共张开的角度大于2∏ ,那么只要计算为2∏ 即可因为原点对任何区域最多只能张开2∏

#include <stdio.h>
#include 
<math.h>#define M_PI 3.14159265358979323846double k,h,x[101],y[101];
 
double angle(double x0, double y0, double x1, double y1) {
     
double a=atan2(y0, x0);
     
double b=atan2(y1, x1);
     
if(b-a>M_PI) a+=2*M_PI;
     
if(a-b>M_PI) b+=2*M_PI;
     
return a-b;
}
 
int main(void) {
     
int i,n;
     scanf(
"%lf %lf %d",&k,&h,&n);
     
for(i=0;i<n;i++)
          scanf(
"%lf %lf",&x[i],&y[i]);
     x[n]
=x[0],y[n]=y[0];
        
     
double min=0,max=0,sum=0;
     
for(i = 0; i < n; i++) {
         
double temp=angle(x[i],y[i],x[i + 1],y[i + 1]);
          
//printf("temp = %lf\n", temp);
         sum+=temp;
         
if(sum<min) min=sum;
         
if(sum>max) max=sum;
         
if(max-min>=2*M_PI) {
              max
=min+2*M_PI;
              
break;
         }
     }
     printf(
"%.2lf\n", k*h*(max - min));
     
return 0;
}