題目大意:給出一個光源,給出一些圓,求投影區間。
如圖,先可以求出角a,通過半徑與PQ距離,而角b也可以求出。那麼就可以求出兩條切線與Y軸的夾角,分別為a+b,b-a。
之後利用角度求出各投影線段的左右頂點,排序判斷即可。
#include#include #include #include using namespace std; struct Point { double x,y; }p,q; struct Node { double l,r; }line[505]; double dist(Point p1,Point p2) { return sqrt((p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p2.y)); } bool cmp(Node n1,Node n2) { return n1.l R) { printf("%.2f %.2f\n",L,R); L=line[i].l;R=line[i].r; } else R=max(line[i].r,R); } printf("%.2f %.2f\n\n",L,R); } return 0; }