UVA12304 2D Geometry 110 in 1!
题目描述
## 题面翻译
欢迎来到二维计算几何问题 $(110)_2$ 合一~!
你需要写一个程序,回答以下的询问。
输入格式
本题有多组数据。数据组数不超过 $10^3$。
对于每行,有一个询问,格式如上所述。保证所有输入的数字均为整数,且绝对值不大于 $10^3$。
数据以 EOF(文件终止符)结尾。
输出格式
### 询问 $(001)_2$:求外接圆
- 描述:给定三角形,顶点分别为 $(x_1,y_1)$,$(x_2,y_2)$,$(x_3,y_3)$,求出这个三角形的外接圆的圆心和半径。
- 约定:**保证三点不共线**。
### 询问 $(010)_2$:求内切圆
- 描述:给定三角形,顶点分别为 $(x_1,y_1)$,$(x_2,y_2)$,$(x_3,y_3)$,求出这个三角形的内切圆的圆心和半径。
- 约定:**保证三点不共线。**
### 询问 $(011)_2$:过一点求切线
- 输出一个列表(类似 Python 中的数组),列表中含有几个(**或者 $\boldsymbol{0}$ 个**)实数 $\theta$,以角度描述切线的倾斜角。**注意单位是角度,你需要保证 $\boldsymbol{\theta \in \left[0,180\right)}$。**
- **你需要保证列表中的元素是升序排列的。**
- 若无解,输出空列表 `[]`。
- 描述:给定一个以 $(x_c,y_c)$ 为圆心,$r$ 为半径的圆 $C$ 和一个点 $(x_p,y_p)$,求出过 $P$ 且与圆 $C$ 相切的**所有**直线。
### 询问 $(100)_2$:求与一条已知直线相切、过已知点且固定半径的圆
- 输出一个列表(类似 Python 中的数组),列表中含有几个(**或者 $\boldsymbol{0}$ 个**)二元组 $(x,y)$,描述一个圆的圆心。
- **你需要保证列表中的元素以 $x$ 为第一关键字,$y$ 为第二关键字升序排列。**
- 若无解,输出空列表 `[]`。
- 描述:给定过 $(x_1,y_1)$ 和 $(x_2,y_2)$ 的直线 $l$,点 $P(x_p,y_p)$ 和半径 $r$。你需要求出**所有**的圆 $O$,满足以下条件:
- $O$ 与 $l$ 相切。
- 点 $P$ 在圆 $O$ 上。
- $O$ 的半径为 $r$。
### 询问 $(101)_2$:求与两条已知直线相切且固定半径的圆
- 同询问 $(100)_2$ 中的输出。
- 输出一个列表(类似 Python 中的数组),列表中含有几个(**或者 $\boldsymbol{0}$ 个**)二元组 $(x,y)$,描述一个圆的圆心。
- **你需要保证列表中的元素以 $x$ 为第一关键字,$y$ 为第二关键字升序排列。**
- 若无解,输出空列表 `[]`。
- 描述:给定过 $(x_1,y_1)$ 和 $(x_2,y_2)$ 的直线 $l_1$,过 $(x_3,y_3)$ 和 $(x_4,y_4)$ 的直线 $l_2$ 和半径 $r$。你需要求出**所有**的圆 $O$,满足以下条件:
- $O$ 与 $l_1$ 和 $l_2$ 都相切。
- $O$ 的半径为 $r$。
- 约定:**保证 $\boldsymbol{l_1}$ 不与 $\boldsymbol{l_2}$ 平行。**
### 询问 $(110)_2$:求固定半径的公共外切圆
- 同询问 $(100)_2$ 中的输出。
- 输出一个列表(类似 Python 中的数组),列表中含有几个(**或者 $\boldsymbol{0}$ 个**)二元组 $(x,y)$,描述一个圆的圆心。
- **你需要保证列表中的元素以 $x$ 为第一关键字,$y$ 为第二关键字升序排列。**
- 若无解,输出空列表 `[]`。
- 描述:给定圆 $C_1$,半径为 $r_1$,圆心坐标为 $(x_1,y_1)$ 和圆 $C_2$,半径为 $r_2$,圆心坐标为 $(x_2,y_2)$。且给定 $r$。你需要求出**所有**的圆 $O$,满足以下条件:
- $O$ 与 $C_1$ 和 $C_2$ **外切**。也就是说,$O$ 不能把 $C_1$ 或者 $C_2$ 包含在($O$)内。
- $O$ 的半径为 $r$。
请注意:
- 输出时,对于列表元素是实数的情况,你需要保证列表中的元素是**升序**的。
- 输出时,对于列表元素是二元组 $(x,y)$ 的情况,你需要保证这些二元组**以 $x$ 为第一关键字,$y$ 为第二关键字升序排列。**
- 无解的时候输出空列表 `[]`。
- **你的输出中不应包含空格。**
- **每个输出的数字保留 $6$ 位小数。**
对于每个询问,输出结果,格式如上所述。
**每个输出的数字应保留 $6$ 位小数。**
**对于每个列表,以中括号 `[]` 包裹;对于每个二元组,以小括号 `()` 包裹。你的输出中不应包含空格。**
$\text{\small{Translated by @Starrykiller.}}$