#CSP2022009. [CSP202206] 光线追踪

    ID: 31 Type: Default 2000ms 512MiB Tried: 18 Accepted: 2 Difficulty: 3 Uploaded By: Tags>知识点:提高-实现:困难模拟STLCSP时间2022

[CSP202206] 光线追踪

时间限制: 2.0 秒

空间限制: 512 MB

题目描述

光线追踪是计算机图形学领域的一个重要算法,其原理是追踪一束从光源发出的光,经过不同的反射面,最终到达摄像机处的过程。

在这道问题中,你需要实现一段程序来处理一个简易的光线追踪模型。

在平面中有一些反射面,为方便起见,我们设这些反射面都是线段,与坐标轴成 4545 度角摆放,且两个端点的坐标均为整数。为进一步简化问题,我们假设所有的反射表面都是镜面反射。任何一束光线照射到反射面上(为避免讨论,假设反射面不含端点)时,都会改变方向为相应的镜面反射方向。注意,反射面的两侧都可以反射光线。

平面中还有一些激光光源,每个光源位于一个坐标为整数的点上,会向某个水平或竖直的方向发射一定强度的激光。

所有的反射面都不是完美的,每个反射面有一个折损系数 aa,当强度为 II 的光线照射上去时,反射光线的强度会变成 aIaI。为了便于处理,你可以认为所有反射面的材质均不算太好也不算太糟,因此所有的 aa 均在 0.20.80.2\sim 0.8 的范围内。

在一些超高速摄影问题中,有时甚至连光速都要考虑在内。在这个问题中,我们不妨假设激光在 11 单位时间内恰好移动 11 单位距离。然而,超高速摄影带来的往往是采样精度的损失,因此对于一束激光,最终采样到的光线强度都是向下取整后的数值。特别地,当一束激光的强度小于 11 时,认为其已经完全耗散。

问题的最开始,平面上没有反射面也没有光源。接下来你需要处理若干个操作,每个操作形如:

  1. 1 x1 y1 x2 y2 a1~x_1~y_1~x_2~y_2~a:在平面上插入一个分别以 (x1,y1)(x_1,y_1)(x2,y2)(x_2,y_2) 为端点,反射系数为 aa 的反射面,保证反射面与坐标轴成 4545 度角摆放,且不与先前存在、且还没有被删除的反射面在非端点处相交;另外受到渲染效率的影响,问题中的所有反射面的总长度(可以理解为所有 x1x2|x_1-x_2| 之和)不会太大;
  2. 2 k2~k:删除第 kk 个操作插入的反射面,保证第 kk 个操作发生在当前操作之前,且为一个插入操作,且这个反射面还没有被删除;
  3. 3 x y d I t3~x~y~d~I~t:在 (x,y)(x,y) 位置放置一个光源,发射光线方向为 dd,强度为 II,求其所经 tt 时刻后光线到达的坐标以及采样得到的光线强度。其中 dd 的含义为:d=0d=0 表示沿 xx 坐标增加的方向,d=1d=1 表示沿 yy 坐标增加的方向,d=2d=2 表示沿 xx 坐标减小的方向,d=3d=3 表示沿 yy 坐标减小的方向。另外,保证光源不位于当前存在的某个反射面(不含端点)上。注意:如果 tt 时刻后光线刚好到达某个反射面,则其强度取反射后的强度。

输入格式

从标准输入读入数据。

第一行,一个正整数 mm 表示操作的总数量。

接下来 mm 行,每行描述一个操作,格式如题目描述。

其中,除了所有的 aaII 以外的输入均为绝对值不超过 10910^9 的整数,其中 kktt 为正整数;aaII 为小数点不超过 66 位的正实数,其中 aa0.20.80.2\sim 0.8 之间,I109I\le 10^9

输出格式

输出到标准输出。

对于每个查询操作输出一行 33 个整数,形如 x y Ix~y~I,表示激光最终到达位置为 (x,y)(x,y),采样得到的光线强度为 II。特别地,如果采样得到的光线强度为 00(即光线已耗散),你也就无需关心最终到达的坐标,而只需要输出 0 0 0 即可。

题目数据保证,你可以在计算时直接使用 6464 位浮点数的运算和取整操作,而无需担心可能的精度误差问题。

7
1 0 4 2 2 0.4
1 2 2 0 0 0.45
3 -1 3 0 6 5
3 1 5 3 2.4 5
3 0 2 0 3 4
2 1
3 1 5 3 2.4 5
0 1 1
0 0 0
4 2 3
0 1 1

子任务

测试点编号 mm\le 特殊性质
131\sim 3 10001000 所有光线的 t1000t\le 1000,所有输入坐标的绝对值 1000\le 1000
474\sim 7
8108\sim 10 10510^5 所有光线的 t10t\le 10
111311\sim 13 所有 11 操作在所有 33 操作之前,且无 22 操作
141614\sim 16 所有光线的 I=1I=1
172017\sim 20

对于 100%100\% 的数据,保证 m105m\le 10^5,所有反射面面 x1x2|x_1-x_2| 之和不超过 3×1053\times 10^5