最近小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
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