最近小H在做一款名为"球"的游戏,这是一款3D游戏,球体是该游戏中唯一存在的几何体,该游戏中存在两种材质的球体,漫反射球和折射球,同时每一个球体都会有自己的颜色. 现在这个游戏是不完善的,小H还没有实现该游戏的显示系统,因此现在他需要你的帮助。
你在游戏空间的位置 $\vec{o}=(0,0,0)$ 处,给定方向 $\vec{d}=(x,y,-1)$,你需要计算你在沿这个方向上所看到的颜色(注:颜色为一个三元组 $(R,G,B)$)。
计算方法如下:
第一行两个正整数$n, m\ (1 \le n \le 10, 1 \le m \le 255 \times 255)$,表示空间内球体的数量以及观测次数。
第二行输入三个浮点数 $R, G, B(0 \le R,G,B \le 1.0)$ 表示背景颜色。
接下来 $n$ 行,每行输入
$x,y,z\ (-10 \le x,y \le 10, -10 \le z \le -30), r\ (1.0 \le r \le 3.0), t\ (t \in \{1, 2\}), R,G,B\ (0 \le R,G,B \le 1.0)$
$x,y,z,r$ 是浮点数,表示球心坐标以及球体的半径。
若 $t=1$ 表示该球体为漫反射球,否则为折射球。
$R,G,B$ 为浮点数,表示球体的颜色。
接下来 $m$ 行,每行输入两个浮点数 $x,y$,
表示观测方向为 $\vec{d}=(x, y,-1)$。
保证任意两球体之间距离大于等于 $1.0$, 光线反射次数不会很多
输出 $m$ 行,每行输出三个整数 $R,G,B$,代表每次观测的结果(请使用以下代码将颜色从浮点数转化为值域从0~255的整数)。
颜色转换(C/C++):
double clamp(double lo, double hi, double v) {
return v < lo ? lo : (v > hi ? hi : v);
}
color_int = (int)(255 * clamp(0, 1, color_double));
颜色转换(Java):
static double clamp(double lo, double hi, double v) {
return Math.max(lo, Math.min(v, hi));
}
color_int = (int)(255 * clamp(0, 1, color_double));
颜色转换 (Python):
def clamp(lo, hi, v):
return max(lo, min(v, hi))
color_int = int(255 * clamp(0, 1, color_double))
2 10 0.235294 0.67451 0.843137 0.757812 0.521484 -16.0156 2.34766 2 0.931641 0.945312 0.776367 0.201172 -0.373047 -24.8047 1.61719 1 0.307617 0.161133 0.224609 0 0.0393701 0 0.0314961 0 0.023622 0 0.015748 0 0.00787402 0 0 0 -0.00787402 0 -0.015748 0 -0.023622 0 -0.0314961
· \n · · \n · · · · · · · \n · · · · · · · \n · \n · \n · \n · \n · \n · \n · \n · \n · \n · \n
227 237 198 228 237 198 227 237 198 226 236 199 225 236 199 223 235 199 220 234 199 217 233 199 213 231 200 209 229 200
· · \n · · \n · · \n · · \n · · \n · · \n · · \n · · \n · · \n · · \n