UVA1678 折纸公理6 Huzita Axiom 6
题目描述
折纸的第一个正式公理列表由Humiaki Huzita和Benedetto Scimemi出版,后来被称为Huzita公理。这些公理描述了通过点和线的对齐可以产生折叠线的方式。接下来是六个公理的一个版本。
1. 对于点p1和p2,有一个唯一的折痕穿过它们。
2. 对于点p1和p2,有一个唯一的折叠方式将p1置于p2上。
3. 对于第l1行和第l2行,有一个折叠方式能将l1放置到l2上。
4. 对于点p1和线l1,存在垂直于l1的唯一折叠方式,其穿过点p1。
5. 对于点p1和p2以及线l1,存在将p1置于l1并穿过p2的折叠方式。
6. 对于点p1和p2以及线l1和l2,有一个折叠将p1放在l1上,p2放在l2上。
罗曼是一个优秀的编码员,但他是折纸建筑的新手,所以他决定编写一个程序来为他计算必要的折叠。他已经完成了对前五个公理的案例编码,但现在他仍然坚持更难的案例,公理号为6.所以他决定雇用一支优秀的程序员团队——你的团队——为他的计划实施这个案例。
输入格式
输入包含多个测试数据。测试用例总数t在输入文件的第一行中指定。
每个测试用例由恰好四行组成,按顺序描述l1,p1,l2和p2。每行由四个整数描述 - 位于其上的两个不同点的坐标:x1,y1,x2,y2。每个点仅用两个整数描述 - 它的x和y坐标。所有坐标的绝对值不超过10。保证p1既不位于l1上,也不位于p2位于l2上。线l1和线l2不同,但点p1和p2可以相同。
输出格式
对于每个测试数据占一行,其中包含用于折叠的直线描述。
使用与输入中相同的格式 - 指定其上两个点的坐标。这两个点的x或y坐标必须相差至少10^4。坐标的绝对值不得超过10^9。判断程序将检查折叠后的p1与l1之间的距离;折叠后的p2与l2之间的距离不超过10^4。如果有多种解决方案,任何人都可以。如果没有解决方案,则输出四个零,用空格分隔。
### 注意:下图说明了第一个样例。折叠线是虚线。
>输入,输出样例、“下图”见PDF