感谢吧主和这么多吧友的支持,真让我受宠若惊啊

很久没更新了 最近工作有点忙,终于盼到星期六了啊!!
接下来楼主继续
上次那几个曲线(74楼)总算是拟合好了
根据距离dist,入射角input_angle,计算出射光线 output_angle 和 output_space。
拟合分两步:
第一步,先根据距离dist拟合出逃离角(即能避免光线不进入另一个空间的最小入射角)
float core_size = 10;
float t = core_size / dist; // 距离和虫洞内径比值
float escape_radius = core_size*t*t - 3*core_size*t + 3*core_size; // 等价逃离半径
float escape_angle = asin(escape_radius/dist); // 逃离角
算得逃离角,也就知道了出射空间
下面进行第二步,拟合出射角
// 若光线无偏转,直接进行镜面反射的出射角,作为基准角度output_base
float output_base = input < escape_angle ? (1-pi/escape_angle)*input + pi : input;
// 算一个比值
float u = input < escape_angle ? input/escape_angle : (pi-input)/(pi-escape_angle);
// 算一个指数
float power = ((input < escape_angle ? 0 : (0.5*pi - escape_angle)/(0.25*pi)) + 1.5)^3 * (1+u);
// 最终比值的指数次方再乘上10倍逃离角即为出射角
float final_output = output_base - escape_angle * 10 * pow(u, power);
当然 ,这只是根据光谱拟合出来的公式,即接近真实的公式。