[抛砖引玉]基于绝对值+扫描函数的轨迹通解
修改于07/29123 浏览攻略
前情提要:
在掌握了分段函数之后,我们可以设计一种设计方案,既保证通过复杂路径的准确度,又保证打击时的容错,这就是基于绝对值+扫描函数的设计方案,话不多说,开始教学。
1.设计路径函数
我们使用绝对值函数最擅长处理的折线作为路径,写下函数:
f(x)=0.5(A*2x+B1(abs(x-x1)+x-x1)+B2…+B3…)
为了得到正确的函数,我们需要:
a.预先设计一个折线
b.找出所有拐点
c.将拐点相对横坐标依次填入x1,x2…
d.计算斜率
e.计算斜率差,填入A,B1,B2…
关于突变
如果有地方不好走,可以在后面插入一个突变函数,不交给不擅长处理突变的绝对值处理,由于绝对值函数主要计算量斜率和统一的Δy无关,这一操作并不会增加运算量。
2.补充突变函数
事实上这和3往往是同时完成的,根据你希望插入突变的坐标t和突变量A,写下:
f(x)=A/(1+10^(10(t-x)))即可
3.设计扫描函数
当点移动到能看到敌人的时候,就该进行打击了,打击函数是形如(f(x)+g(x)sin(10x))*[ε(x-t1)-ε(x-t2)]的函数(如果只希望单侧扫描,则需要给sin加abs),对于f和g比较实用的组合有如下几种:
3.1水平扫描
f(x)=A,g(x)=B (A+Bsin(10x))

3.2垂直扫描
f(x)=0,g(x)=A (Aabs(sin(10x)))

3.3直线扫描
如果水平和垂直角度都很刁钻,可以采用直线
f(x)=k(x-x1+x0)+y1-y0 g=A

3.4三角扫描/梯形扫描
适用于入口狭窄但后续开阔的地形,可以产生一个三角形扫描区域:
f(x)=A g(x)=B(x-t1)
以及梯形区域
f(x)=A g(x)=B(x-t1)+C

三角扫描

半三角扫描

梯形扫描

半梯形扫描
当然以上函数需要限制作用区间
扫描函数的双作用域实现
如果出现多个可以使用相同扫描函数打击的区域,可以将他们合并:


*注意观察分母结构
双作用域进阶~击杀不处于相同y值的敌人
实现方案1:直线近似
好处是敲起来相对简单,但是计算量比较大

方案二:阶跃函数
好处是比较好计算,坏处是敲起来慢一点


