Common Tangents FZU - 2213
2017-07-26 15:13
169 查看
Two different circles can have at most four common tangents.
The picture below is an illustration of two circles with four common tangents.
Now given the center and radius of two circles, your job is to find how many common tangents between them.
Input
The first line contains an integer T, meaning the number of the cases (1 <= T <= 50.).
For each test case, there is one line contains six integers x1 (−100 ≤ x1 ≤ 100), y1 (−100 ≤ y1 ≤ 100), r1 (0 < r1 ≤ 200), x2 (−100 ≤ x2 ≤ 100), y2 (−100 ≤ y2 ≤ 100), r2 (0 < r2 ≤ 200). Here (x1, y1) and (x2, y2) are the coordinates of the center of the
first circle and second circle respectively, r1 is the radius of the first circle and r2 is the radius of the second circle.
Output
For each test case, output the corresponding answer in one line.
If there is infinite number of tangents between the two circles then output -1.
Sample Input
Sample Output
题意:题目说是一般常见的两个圆形有四条相连接的切线
给你他们两个园的坐标及其半径,求出切线的条数
分析:分情况讨论两种圆的位置关系
重合,相交,内切,外切,内离,不相交,
依次输出
#include <cstdio>
#include <algorithm>
#include <iostream>
#include <queue>
#include <string.h>
#include <math.h>
#include <cmath>
using namespace std;
int main()
{
int n;
cin>>n;
int a[50];
int x1=0,y1=0,r1=0,x2=0,y2=0,r2=0;
memset(a,0,sizeof(a));
for(int i=0;i<n;i++)
{
cin>>x1>>y1>>r1>>x2>>y2>>r2;
double d=sqrt(1.0*((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)));
int a;
if(d==0.0&&r1==r2)
a=-1;
else if(d>1.0*(r1+r2))
a=4;
else if(d==1.0*(r1+r2))
a=3;
else if(d<1.0*(r1+r2)&&d>1.0*fabs(r1-r2))
a=2;
else if(d==1.0*fabs(r1-r2))
a=1;
else if(d<1.0*fabs(r1-r2))
a=0;
printf("%d\n",a);
}
}
The picture below is an illustration of two circles with four common tangents.
Now given the center and radius of two circles, your job is to find how many common tangents between them.
Input
The first line contains an integer T, meaning the number of the cases (1 <= T <= 50.).
For each test case, there is one line contains six integers x1 (−100 ≤ x1 ≤ 100), y1 (−100 ≤ y1 ≤ 100), r1 (0 < r1 ≤ 200), x2 (−100 ≤ x2 ≤ 100), y2 (−100 ≤ y2 ≤ 100), r2 (0 < r2 ≤ 200). Here (x1, y1) and (x2, y2) are the coordinates of the center of the
first circle and second circle respectively, r1 is the radius of the first circle and r2 is the radius of the second circle.
Output
For each test case, output the corresponding answer in one line.
If there is infinite number of tangents between the two circles then output -1.
Sample Input
3 10 10 5 20 20 5 10 10 10 20 20 10 10 10 5 20 10 5
Sample Output
4 23
题意:题目说是一般常见的两个圆形有四条相连接的切线
给你他们两个园的坐标及其半径,求出切线的条数
分析:分情况讨论两种圆的位置关系
重合,相交,内切,外切,内离,不相交,
依次输出
#include <cstdio>
#include <algorithm>
#include <iostream>
#include <queue>
#include <string.h>
#include <math.h>
#include <cmath>
using namespace std;
int main()
{
int n;
cin>>n;
int a[50];
int x1=0,y1=0,r1=0,x2=0,y2=0,r2=0;
memset(a,0,sizeof(a));
for(int i=0;i<n;i++)
{
cin>>x1>>y1>>r1>>x2>>y2>>r2;
double d=sqrt(1.0*((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)));
int a;
if(d==0.0&&r1==r2)
a=-1;
else if(d>1.0*(r1+r2))
a=4;
else if(d==1.0*(r1+r2))
a=3;
else if(d<1.0*(r1+r2)&&d>1.0*fabs(r1-r2))
a=2;
else if(d==1.0*fabs(r1-r2))
a=1;
else if(d<1.0*fabs(r1-r2))
a=0;
printf("%d\n",a);
}
}
相关文章推荐
- FZU 2213——Common Tangents——————【两个圆的切线个数】
- FZU 2213 Common Tangents 第六届福建省赛
- FZU Problem 2213 Common Tangents(简单几何,分类讨论)——第六届福建省大学生程序设计竞赛-重现赛
- 2015福建省赛 Common Tangents 2213 (简单数学几何)
- FOJ 2213 Common Tangents 【第六届福建省大学生程序设计竞赛】
- 第六届福建省大学生程序设计竞赛 Common Tangents
- 友谊赛的题目( FZU 2212)( FZU 2213)( FZU 2214)
- fzu 2213 通过圆心坐标和半径判断两圆的关系
- 第六届福建省大学生程序设计竞赛-重现赛,Problem B Common Tangents【数学几何】
- Common Tangents【第六届福建省大学生程序设计竞赛-重现赛】
- FZU 1160 Common Subsequence
- 第六届福建省大学生程序设计竞赛 Problem B Common Tangents【几何】
- 福建省赛-- Common Tangents(数学几何)
- 福建省赛-- Common Tangents(数学几何)
- Common Python 3 Libraries(Chapter 12 of Python 3 Object Oriented Programming)
- FZU 1894 — 志愿者选拔 单调队列
- http://acm.fzu.edu.cn/problem.php?pid=1564 C(n,k)和素数P的问题
- 【补】【FZU月赛】【20150515】【待续】
- Struts2中使用Common-FileUpload实现文件上传
- poj 1330 Nearest Common Ancestors(LCA)