函数渲染器 EquationRenderer
提示
该粒子特效已实现 Playable 接口, 支持按 period/tick 进行播放 可以调用以下三个方法
- play() 若特效类已经实现 Playable 接口, 则会出现该方法
 - alwaysPlay() 可以使得当前的特效一直进行步进播放, 只不过 ParticleLib 会占用主线程来执行计算
 - alwaysPlayAsync() 跟 alwaysPlay 一样, 只不过 ParticleLib 会使用异步的方式来执行计算并显示特效
 
函数渲染器即为开发者通过给定一个函数与相关参数, EquationRenderer 则会把函数图像给描绘出来
提示
函数渲染器支持设定的相关参数包括
- 参数的步进
 - 参数的最大最小值
 - 等
 
一般函数渲染器和极坐标函数渲染器 都是以 XY 平面作为水平面, 想改的话可以自行更改源码, 参数方程渲染器支持 x y z 三个坐标都给定函数
普通函数渲染器
一般函数渲染器是基于 y = f(x) 的函数进行的渲染
例如简单的 y = x^2 则为抛物线可见如下的实现
GeneralEquationRenderer renderer = new GeneralEquationRenderer(player.getLocation(), x -> {
    return Math.pow(x, 2);
});
renderer.alwaysShowAsync();
实际效果为:

图中的红点为 player.getLocation 的点, 即原点
由于普通函数渲染器默认参数为
- minX: -5 表示函数中 x 的最小值
 - maxX: 5 表示函数中 x 的最大值
 - dx: 0.1 表示函数中 x 的改变量, 即每一次显示粒子时的改变量
 
因此在上图看出来的函数图像比较的高且密集, 因此我们可以修改一下参数可得下面的结果
GeneralEquationRenderer renderer = new GeneralEquationRenderer(player.getLocation(), x -> Math.pow(x, 2));
renderer.setMinX(-3)
        .setMaxX(3)
        .setDx(0.3);
renderer.alwaysShowAsync();

参数方程渲染器
参数方程渲染器 支持 x y z 三轴(MC中)都给定方程, 即可以实现
x = f(t)
y = g(t)
z = h(t)
默认 t 的取值范围为 [0, 360] dt 为 1
以下例子都实现于XY平面当中
ParametricEquationRenderer renderer = new ParametricEquationRenderer(player.getLocation(), t -> 2 * Math.pow(Math.cos(t), 3), t -> 2 * Math.pow(Math.sin(t), 3));
renderer.alwaysShowAsync();

ParametricEquationRenderer renderer = new ParametricEquationRenderer(player.getLocation(), Math::cos, Math::sin);
renderer.setDt(30);
renderer.alwaysShowAsync();

极坐标方程渲染器
提示
极坐标支持设定的参数为
- minTheta θ 的最小值, 默认为 0
 - maxTheta θ 的最大值, 默认为 360
 - dTheta θ 的该变量, 默认为 1
 
以四叶玫瑰线为例 ρ=a*sin(2θ) 取 a 为 1.5 则有如下图像
PolarEquationRenderer renderer = new PolarEquationRenderer(player.getLocation(), theta -> {
    return 1.5 * Math.sin(2 * theta);
});
renderer.alwaysShowAsync();
