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

推荐订阅源

N
Netflix TechBlog - Medium
罗磊的独立博客
H
Help Net Security
I
Intezer
G
Google Developers Blog
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
T
Troy Hunt's Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
U
Unit 42
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
N
News and Events Feed by Topic
J
Java Code Geeks
S
Security Affairs
T
The Blog of Author Tim Ferriss
Recent Commits to openclaw:main
Recent Commits to openclaw:main
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
D
Docker
The GitHub Blog
The GitHub Blog
F
Full Disclosure
N
News and Events Feed by Topic
Webroot Blog
Webroot Blog
S
Security @ Cisco Blogs
腾讯CDC
人人都是产品经理
人人都是产品经理
M
MIT News - Artificial intelligence
Blog — PlanetScale
Blog — PlanetScale
T
Threatpost
D
DataBreaches.Net
Recent Announcements
Recent Announcements
博客园 - 三生石上(FineUI控件)
MongoDB | Blog
MongoDB | Blog
博客园 - 【当耐特】
L
LINUX DO - 最新话题
Google Online Security Blog
Google Online Security Blog
S
Schneier on Security
S
Securelist
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Help Net Security
Help Net Security
P
Proofpoint News Feed
Project Zero
Project Zero
S
SegmentFault 最新的问题
H
Hackread – Cybersecurity News, Data Breaches, AI and More
MyScale Blog
MyScale Blog
Google DeepMind News
Google DeepMind News
宝玉的分享
宝玉的分享
Y
Y Combinator Blog
C
CXSECURITY Database RSS Feed - CXSecurity.com
博客园 - 叶小钗

博客园 - 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;
}