#L6352. 魔法元首的代表色选择

魔法元首的代表色选择

魔法元首的代表色选择

题目描述

小朋友,你们好吗?还能记得我是谁吗?我就是魔法元首まどか!

「和我签订契约,成为魔法元首吧!」

于是这天元首不明所以地被地外生物 Kyubey 忽悠去成为了魔法元首。不过在开始练习魔法之前,元首需要为自己的魔法选择一个代表色。

下图是一个明度最大(即 HSV 色彩空间中 V = 100%)的单位圆色盘:

色盘上任意一点的坐标为非负实数对 (α,r%)(\alpha^\circ, r\%),其中 0α<3600 \leq \alpha < 3600r1000 \leq r \leq 100,表示色相为 α\alpha^\circ、饱和度为 r%r\% 的颜色。另一种理解是:

  • α\alpha^\circ 表示从联结圆心和纯红色点的射线顺时针到达该点所经过的角度;
  • r100\frac{r}{100} 是该点到单位圆圆心的距离。

RGB 转换规则

从坐标 (α,r%)(\alpha^\circ, r\%) 到红绿蓝颜色值 (R,G,B)(R, G, B) 的转换步骤如下:

$$\begin{align} h &= \left\lfloor \frac{\alpha}{60} \right\rfloor \\ f &= \frac{\alpha}{60} - h \\ p &= 1 - (r\%) \\ q &= 1 - f \times (r\%) \\ t &= 1 - (1 - f) \times (r\%) \end{align} $$

最终 (R,G,B)(R, G, B)hh 的取值确定:

$$(R, G, B) = \begin{cases} (1, t, p), & \text{if } h = 0 \\ (q, 1, p), & \text{if } h = 1 \\ (p, 1, t), & \text{if } h = 2 \\ (p, q, 1), & \text{if } h = 3 \\ (t, p, 1), & \text{if } h = 4 \\ (1, p, q), & \text{if } h = 5 \end{cases} $$

请参照样例确认对公式的理解和实现。

亮度定义

一个颜色 (R,G,B)(R, G, B) 的亮度定义为:

L=0.30R+0.59G+0.11BL = 0.30R + 0.59G + 0.11B

下图给出了彩色色盘和表示亮度的灰度色盘的左右对比:

问题要求

按照 Kyubey 的判断,元首可以选择色盘所在平面上一条给定直线段 (α1,r1%)(α2,r2%)(\alpha_1^\circ, r_1\%)–(\alpha_2^\circ, r_2\%) 上的任意颜色。作为 bling bling 的帝国领导者,元首要选择最亮的颜色。

请编写程序帮助元首计算给定直线段上所有颜色的最大亮度。

输入格式

  • 第一行输入正整数 TT,表示测试数据组数(各组数据之间无空行)。
  • 接下来 TT 行,每行输入四个空格分隔的整数 α1\alpha_1r1r_1α2\alpha_2r2r_2,分别表示直线段两个端点的坐标。

输出格式

  • 对于每组数据,输出一行十进制小数(范围 [0,1][0, 1]),表示直线段上所有颜色的最大亮度。
  • 要求四舍五入保留恰好四位小数。数据保证若参考答案为 AA,则 [A105,A+105][A - 10^{-5}, A + 10^{-5}] 范围内任意实数四舍五入到第四位小数后均相等。

样例

样例输入

6
30 30 30 30
120 60 120 60
270 100 270 100
30 30 120 60
120 60 270 100
270 100 30 30

样例输出

0.8785
0.7540
0.2600
0.9704
0.9408
0.8785

样例解释

  • (30,30%)(30^\circ, 30\%) 的 RGB 值为 (1.00,0.85,0.70)(1.00, 0.85, 0.70),亮度计算:$0.30 \times 1.00 + 0.59 \times 0.85 + 0.11 \times 0.70 = 0.8785$;
  • (120,60%)(120^\circ, 60\%) 的 RGB 值为 (0.40,1.00,0.40)(0.40, 1.00, 0.40),亮度计算:$0.30 \times 0.40 + 0.59 \times 1.00 + 0.11 \times 0.40 = 0.7540$;
  • (270,100%)(270^\circ, 100\%) 的 RGB 值为 (0.50,0.00,1.00)(0.50, 0.00, 1.00),亮度计算:$0.30 \times 0.50 + 0.59 \times 0.00 + 0.11 \times 1.00 = 0.2600$。

数据范围与提示

  • 通用约束:1T1001 \leq T \leq 1000α1,α2<3600 \leq \alpha_1, \alpha_2 < 3600r1,r21000 \leq r_1, r_2 \leq 100
  • 测试点附加限制如下表:
测试点编号 附加限制
1 α1=α2\alpha_1 = \alpha_2r1=r2r_1 = r_2
2
3 α1=α2\alpha_1 = \alpha_2
4
5 α1,α2<60\alpha_1, \alpha_2 < 60
6
7 α1α2<60\lvert \alpha_1 - \alpha_2 \rvert < 60r1=r2r_1 = r_2
8
9
10