Problem of Apollonius
题号:NC243145
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
Special Judge, 64bit IO Format: %lld

题目描述

Perga的Apollonius(约公元前 262 年 - 约公元前 190 年)是希腊几何学家和天文学家。在他著名的作品 Epaphai 中,他提出并解决了这样一个问题:在一个平面上构造与三个给定圆相切的圆。两个相切的圆可以在内部或外部相切,因此Apollonius问题通常有八个解。
现在考虑 Apollonius 问题的简化问题:构造与两个给定圆外部相切并接触给定点的圆(给定点必须在您找到的圆上,不能在圆内)。另外,两个给定的圆没有公共点,也不被另一个包含,并且给定的点也严格位于给定的圆之外。您应该感谢现代数学为您提供了许多有用的工具,而不是欧几里得几何,这些工具对您解决这个问题有很大帮助。

输入描述:

输入的第一行包含一个整数 T ,表示测试用例的数量。

对于每个测试用例,一行内有 8 个正整数 x1, y1, r1, x2, y2, r2, x3, y3 ,表示两个圆,圆心分别为 (x1, y1), (x2, y2),半径分别为 r1r2 ,以及位于 (x3, y3) 的点。所有整数都不大于100

输出描述:

对于每种情况,首先输出一个整数 S,表示解的数量。

然后输出 S 行,每行包含三个浮点数 x, yr,表示圆心为 (x,y),半径为 r 的圆是这种情况的解。如果有多个解,以任何顺序输出它们都可以。如果您对每个数字的绝对误差不超过 ,您的答案将被接受。
示例1

输入

复制
1
12 10 1 8 10 1 10 10

输出

复制
2
10.00000000 8.50000000 1.50000000
10.00000000 11.50000000 1.50000000

备注:

原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=4773