POJ 1375

可以通过顶角角度来计算切线与坐标轴的坐标

开始还以为有公式可以算,谁知道原来是解二元一次方程,靠。。

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>

using namespace std;
const int MAX=1050;

struct point{
	double x;
	int flag;
	point(){ flag=0;}
}p[MAX];

double dist(double x1,double y1,double x2,double y2){
	return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
}

bool cmp(point A, point B){
	if(A.x<B.x)return true;
	else if(A.x==B.x){
		if(A.flag<B.flag) return true;
	}
	return false;
}

int main(){
	double lx,ly; int n; double x,y,r;
	while(scanf("%d",&n)!=EOF){
		if(n==0) break;
		scanf("%lf%lf",&lx,&ly);
		for(int i=0;i<n;i++){
			scanf("%lf%lf%lf",&x,&y,&r);
			double dis=dist(lx,ly,x,y);
			double Agle=asin(r/dis); double Bgle=asin((lx-x)/dis);
			double bx=lx-ly*tan(Agle+Bgle);
			double ex=lx-ly*tan(Bgle-Agle);
			p[2*i].x=bx; p[2*i].flag=-1;
			p[2*i+1].x=ex; p[2*i+1].flag=1;
		}
		sort(p,p+2*n,cmp);
		int now=0; double L;
		for(int i=0;i<2*n;i++){
			if(now==0){
			L=p[i].x;
			}
			now+=p[i].flag;
			if(now==0)
			printf("%0.2f %0.2f\n",L,p[i].x);
		}
		printf("\n");
	}
	return 0;
}

  

POJ 1375

时间: 2024-08-23 00:52:18

POJ 1375的相关文章

poj 1375(解析几何)

Intervals Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 4292   Accepted: 1288 Description In the ceiling in the basement of a newly open developers building a light source has been installed. Unfortunately, the material used to cover t

POJ 1375 Intervals

解析几何,利用直角三角形asin函数求出角来,然后根据y就可以算出x了 最后把点排序一下,入点+1,出点-1,由0变为1则是入点,由1变为0时则是出点 #include<stdio.h> #include<math.h> #include<algorithm> #include<string.h> using namespace std; struct Circle{ double x,y,r; }; struct Node{ double x; int f

poj 1375 Intervals(解析几何 过圆外一点求与圆的切线)

题目大意:给出一个光源,给出一些圆,求投影区间. 如图,先可以求出角a,通过半径与PQ距离,而角b也可以求出.那么就可以求出两条切线与Y轴的夹角,分别为a+b,b-a. 之后利用角度求出各投影线段的左右顶点,排序判断即可. #include<iostream> #include<algorithm> #include<cmath> #include<cstdio> using namespace std; struct Point { double x,y;

POJ 1375 Intervals 解析几何 求圆的切线

题目大意:给出一个点,再给出都处于这个点之下的一些圆,求这个点光源照到这些圆上之后所得到的阴影的并集. 思路:求出每一个圆关于那个点的切线,每一个圆可以处理出来两个切线,这两个切线在x轴上交点的中间部分就是要求的阴影.最后将所有的阴影部分取并输出. 关于求切线,我是利用方向向量解方程做的.应该有更简洁的方法吧.. CODE: #include <cmath> #include <cstdio> #include <cstring> #include <iostre

POJ 1375 Intervals | 解析几何

参考了这个博客 #include<cstdio> #include<algorithm> #include<cstring> #include<cmath> using namespace std; struct point { double x,y; point(){}; point(double _x,double _y) { x=_x,y=_y; } }p,q; struct range { double l,r; bool operator <

[poj] 1375 Interval || 圆的切线&amp;和直线的交点

原题 每组数据给出一些圆(障碍物)的圆心和半径,一个点和一条线段,求站在这个点,能开到的线段的部分的左端点和右端点.没有则输出"No View" 相当于求过该点的圆的两条切线,切线外即为可见的地方. 借鉴于这个blog:http://blog.csdn.net/acm_cxlove/article/details/7896110 只要求出两条直线和竖直的夹角,然后通过向量旋转即可得到交点横坐标. #include<cstdio> #include<algorithm&

[转] POJ几何分类

转自:http://blog.csdn.net/tyger/article/details/4480029 计算几何题的特点与做题要领:1.大部分不会很难,少部分题目思路很巧妙2.做计算几何题目,模板很重要,模板必须高度可靠.3.要注意代码的组织,因为计算几何的题目很容易上两百行代码,里面大部分是模板.如果代码一片混乱,那么会严重影响做题正确率.4.注意精度控制.5.能用整数的地方尽量用整数,要想到扩大数据的方法(扩大一倍,或扩大sqrt2).因为整数不用考虑浮点误差,而且运算比浮点快. 一.点

【转】计算几何题目推荐

打算转下来好好做计算几何了. 原文地址:http://blog.sina.com.cn/s/blog_49c5866c0100f3om.html 其实也谈不上推荐,只是自己做过的题目而已,甚至有的题目尚未AC,让在挣扎中.之所以推荐计算几何题,是因为,本人感觉ACM各种算法中计算几何算是比较实际的算法,在很多领域有着重要的用途计算几何题的特点与做题要领:1.大部分不会很难,少部分题目思路很巧妙2.做计算几何题目,模板很重要,模板必须高度可靠.3.要注意代码的组织,因为计算几何的题目很容易上两百行

优质题表(机密版)

转载请注明出处:http://www.cnblogs.com/dashuzhilin/p/4556803.html 思维题: poj 1528 poj 1597 poj 2538 poj 2608 poj 2612 poj 2361 poj 2339 poj 2664 uva 10894 uva 10921   uva 10922   uva 10929 uva 10931   uva 10800   uva 10878 uva 10976   uva 10323   uva 201 poj 2