zoukankan      html  css  js  c++  java
  • 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
    ",L,p[i].x);
    		}
    		printf("
    ");
    	}
    	return 0;
    }
    

      

  • 相关阅读:
    while语句
    闭包
    文件操作
    Python基础九:高级特性
    Python基础八:函数
    Python基础六:字典和集合
    Python基础七:条件判断和循环结构
    Python基础五:列表和元组
    Python基础四:字符串及编码
    Python基础三:数据类型和变量
  • 原文地址:https://www.cnblogs.com/jie-dcai/p/3874217.html
Copyright © 2011-2022 走看看