POJ3675 Telescope 圓和多邊形的交

POJ3675

用三角剖分可以輕松搞定,數據也小 隨便AC。

#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#include<algorithm>
#include<queue>
#include<vector>
using namespace std;
const double eps=1e-10,PI=acos(-1.0);int cmp(double k)
{return k<-eps ? -1:k>eps ? 1:0;
}const double pi=acos(-1.0);inline double sqr(double x)
{return x*x;
}struct point
{double x,y;point (){}point (double a,double b):x(a),y(b){}bool input(){return scanf("%lf%lf",&x,&y)!=EOF;}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 cmp(a.x-b.x)==0&&cmp(a.y-b.y)==0;}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);}double norm(){return sqr(x)+sqr(y);}
};double mysqrt(double x)
{return sqrt(x);
}
double dot(const point &a,const point &b)
{return a.x*b.x+a.y*b.y;
}
double cross(const point &a,const point &b)
{return a.x*b.y-a.y*b.x;
}
double abs(const point &o)
{return sqrt(dot(o,o));
}
void circle_cross_line(point a,point b,point o,double r,point ret[],int &num)
{double x0=o.x,y0=o.y;double x1=a.x,y1=a.y;double x2=b.x,y2=b.y;double dx=x2-x1,dy=y2-y1;double A=dx*dx+dy*dy;double B=2*dx*(x1-x0)+2*dy*(y1-y0);double C=sqr(x1-x0)+sqr(y1-y0)-sqr(r);double delta=B*B-4*A*C;num=0;if(cmp(delta)>=0){double t1=(-B-mysqrt(delta))/(2*A);double t2=(-B+mysqrt(delta))/(2*A);if(cmp(t1-1)<=0&&cmp(t1)>=0){ret[num++]=point(x1+t1*dx,y1+t1*dy);}if(cmp(t2-1)<=0&&cmp(t2)>=0){ret[num++]=point(x1+t2*dx,y1+t2*dy);}}
}point crosspt(const point &a,const point &b,const point &p,const point &q)
{double a1=cross(b-a,p-a);double a2=cross(b-a,q-a);return (p*a2-q*a1)/(a2-a1);
}double sector_area(const point &a,const point &b,const double r)
{double theta=atan2(a.y,a.x)-atan2(b.y,b.x);while(cmp(theta)<=0)theta+=2*PI;while(cmp(theta-2*PI)>0)theta-=2*PI;theta=min(theta,2*PI-theta);return r*r*theta/2.;
}double calc_c(const point &a,const point &b,const double r)
{point p[2];int num=0;bool ina=cmp(abs(a)-r)<0;bool inb=cmp(abs(b)-r)<0;if(ina){if(inb)return fabs(cross(a,b))/2.;else{circle_cross_line(a,b,point(0,0),r,p,num);return fabs(sector_area(b,p[0],r))+fabs(cross(a,p[0]))/2.;}}else{if(inb){circle_cross_line(a,b,point(0,0),r,p,num);return fabs(sector_area(p[0],a,r))+fabs(cross(p[0],b))/2.;	}else{circle_cross_line(a,b,point(0,0),r,p,num);if(num==2){return fabs(sector_area(a,p[0],r))+fabs(sector_area(p[1],b,r))+fabs(cross(p[0],p[1]))/2.;}else{return fabs(sector_area(a,b,r));}}}
}double area(int n,point res[],double r)
{double ret=0.;for(int i=0;i<n;i++){int sgn=cmp(cross(res[i],res[(i+1)%n]));if(sgn!=0){ret+=sgn*calc_c(res[i],res[(i+1)%n],r);} 	}return ret;
} 
point pp[100];
int main()
{freopen("t.txt","r",stdin);double r;int n;while(scanf("%lf",&r)!=EOF){scanf("%d",&n);for(int i=0;i<n;i++)pp[i].input();pp[n]=pp[0];printf("%.2f\n",fabs(area(n,pp,r))+eps);
}return 0;
}

  

轉載于:https://www.cnblogs.com/heisenberg-/p/6724576.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/372370.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/372370.shtml
英文地址,請注明出處:http://en.pswp.cn/news/372370.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

windows搭建python開發環境方法_04 Windows下搭建 Python 開發環境 - Python 入門教程

前面兩個小節中我們已經學習了在 MacOS 和 Ubuntu 中安裝 Python 的開發環境。當然&#xff0c;作為用戶基數最多的 Windows 操作系統&#xff0c;我們當然不會忘記&#xff0c;這節課我們就來學習下如何在 Windows 下搭建 Python 的開發環境。1. 下載 Python1.1 Python 2 與 P…

消除view旋轉后邊緣有鋸齒的情況

view的layer中有個屬性叫 allowsEdgeAntialiasing&#xff1b; 在形變后有邊緣有鋸齒的話 可以 view.layer.allowsEdgeAntialiasing YES; 消除鋸齒 如果直接在*-Info.plist配置 Renders with edge antialiasing YES 會導致UIAlertView顯示有問題。轉載于:https://www.cnblogs…

Google AppEngine:任務隊列API

任務隊列 com.google.appengine.api.taskqueue 使用任務隊列&#xff0c;用戶可以發起一個請求&#xff0c;以使應用程序執行此請求之外的工作。 它們是進行后臺工作的強大工具。 此外&#xff0c;您可以將工作組織成小的離散單元&#xff08;任務&#xff09;。 然后&#xf…

打印5列五顆星_55組“數學順口溜” 大九九乘法口訣表!孩子想學好數學必須背熟...

小學數學需要記住的知識點還是比較多的&#xff0c;看到這些知識點&#xff0c;很多孩子都覺得枯燥&#xff0c;不愿意用心去記。今天&#xff0c;我們給孩子們匯總了55組“數學順口溜”和大九九乘法口訣&#xff0c;讓孩子們在輕松有趣的氛圍中學到知識&#xff01;55組“順口…

C++學習48 對ASCII文件的讀寫操作

如果文件的每一個字節中均以ASCII代碼形式存放數據,即一個字節存放一個字符,這個文件就是ASCII文件(或稱字符文件)。程序可以從ASCII文件中讀入若干個字符,也可以向它輸出一些字符。 對ASCII文件的讀寫操作可以用以下兩種方法&#xff1a;1) 用流插入運算符“<<”和流提取…

文獻綜述寫作之“結構內容”

綜述&#xff1a; 又稱文獻綜述&#xff0c;英文名為review。它是利用已發表的文獻資料為原始素材撰寫的&#xff0c;通過對已發表材料的組織、綜合和評價&#xff0c;以及對當前研究進展的考察來澄清問題。在某種意義上&#xff0c;綜述論文具有一定的指導性&#xff0c;包括以…

NetBeans 7.2 beta:更快,更有用

NetBeans 7.2的beta版本引起了極大的興奮。 在本文中&#xff0c;我將簡要介紹一下此版本令人興奮的原因&#xff08;包括更好的性能&#xff0c;提供更多的提示以及集成FindBugs&#xff09;。 NetBeans 7.2 beta在典型的下載捆綁軟件中可用&#xff0c;從較小的Java SE&#…

地鐵閘門會夾傷人嗎_家長們注意啦!又有孩子被地鐵閘機夾翻

原標題&#xff1a;家長們注意啦&#xff01;又有孩子被地鐵閘機夾翻現代快報訊(通訊員狄公宣記者顧元森)家長帶著孩子通過地鐵站閘機&#xff0c;這件事情看似簡單&#xff0c;卻隱藏著風險。近日&#xff0c;南京地鐵又發生了一起兒童被閘機夾翻的事&#xff0c;所幸孩子并無…

WPF DevExpress 設置雷達圖Radar樣式

DevExpress中定義的ChartControl很不錯&#xff0c;很多項目直接使用這種控件。 本節講述雷達圖的樣式設置 <Grid><Grid.Resources><DataTemplate x:Key"LabelItemDataTemplate" DataType"dxc:SeriesLabelItem"><Border CornerRadius…

mxnet系列教程之1-第一個例子

第一個例子當然是mnist的例子 假設已經成功安裝了mxnet 例子的代碼如下&#xff1a; cd mxnet/example/image-classification python train_mnist.py這樣就會運行下去 train_mnist.py的代碼為 """ Train mnist, see more explanation at http://mxnet.io/tutori…

Apache Shiro第3部分–密碼學

除了保護網頁和管理訪問權限外&#xff0c; Apache Shiro還執行基本的加密任務。 該框架能夠&#xff1a; 加密和解密數據&#xff0c; 哈希數據&#xff0c; 生成隨機數。 Shiro沒有實現任何加密算法。 所有計算都委托給Java密碼學擴展&#xff08;JCE&#xff09;API。 使…

mysql數據存在就更新_Mysql:如果數據存在則更新,不存在則插入

mysql語法支持如果數據存在則更新&#xff0c;不存在則插入&#xff0c;首先判斷數據存在還是不存在的那個字段要設置成unique索引&#xff0c;例如表tb_addrbook如下&#xff1a;索引&#xff1a;語句1:不存在插入INSERT INTO tb_addrbook(num,name,mobile) VALUE(1001,小李,1…

Memcached, Redis, MongoDB區別

mongodb和memcached不是一個范疇內的東西。mongodb是文檔型的非關系型數據庫&#xff0c;其優勢在于查詢功能比較強大&#xff0c;能存儲海量數據。mongodb和memcached不存在誰替換誰的問題。和memcached更為接近的是redis。它們都是內存型數據庫&#xff0c;數據保存在內存中&…

洛谷P1757 通天之分組背包 [2017年4月計劃 動態規劃06]

P1757 通天之分組背包 題目背景 直達通天路小A歷險記第二篇 題目描述 自01背包問世之后&#xff0c;小A對此深感興趣。一天&#xff0c;小A去遠游&#xff0c;卻發現他的背包不同于01背包&#xff0c;他的物品大致可分為k組&#xff0c;每組中的物品相互沖突&#xff0c;現在&a…

c3p0 0.9.1.2 配套mysql_連接數據庫,使用c3p0技術連接MySQL數據庫

讀取配置文件連接MySQL數據庫先確認已經導入了 mysql 的驅動包db.propertiesdrivercom.mysql.jdbc.Driverurljdbc:mysql://localhost:3306/v20?useUnicodetrue&characterEncodingutf8usernamerootpassword123456JdbcUtil.javapackage com.stu_mvc.utils;import java.io.Fi…

【Hadoop】Hadoop MR 自定義分組 Partition機制

1、概念 2、Hadoop默認分組機制--所有的Key分到一個組&#xff0c;一個Reduce任務處理 3、代碼示例 FlowBean package com.ares.hadoop.mr.flowgroup;import java.io.DataInput; import java.io.DataOutput; import java.io.IOException;import org.apache.hadoop.io.WritableC…

Spring Framework 3.2 M1發布

SpringSource剛剛宣布了針對Spring 3.2的第一個里程碑版本。 現在可以從SpringSource存儲庫&#xff08;位于http://repo.springsource.org/&#xff09;獲得新版本。 查看有關通過Maven 解決這些工件的快速教程 。 此版本包括&#xff1a; 最初支持異步Controller方法 早期…

兩種動態SQL

參考&#xff1a;http://www.cnblogs.com/wanyuan8/archive/2011/11/09/2243483.htmlhttp://www.cnblogs.com/xbf321/archive/2008/11/02/1325067.html 兩種動態SQL  1. EXEC (sql)   2. EXEC sp_executesql 性能&#xff1a;sp_executesql提供了輸入輸出接口&#xff0c;更…

mysql查詢含有某個值的表_MYSQL查詢數據表中某個字段包含某個數值

當某個字段中字符串是"1,2,3,4,5,6"或者"123456" 查詢數據表中某個字段是否包含某個值 1:模糊查詢 使用like select * from 表 where 字段 like %1%; 2:函數查找 find_in_set(str,數組) select * from 表 where find_in_set(1,字段); 注意:mysql字符串…

android學習筆記35——AnimationDrawable資源

AnimationDrawable資源 AnimationDrawable&#xff0c;代表一個動畫。 android既支持傳統的逐幀動畫(類似于電影方式&#xff0c;一張圖片一張圖片的切換)&#xff0c;也支持通過平移、變換計算出來的補間動畫、屬性動畫。 下面以補間動畫為例&#xff0c;介紹如何定義Animatio…