我试图将计算法线的Bezier.js实现转换为Shadertoy程序,代码似乎不使用任何计算值。它也需要是二次有理。
我发现Javascript代码有点难以理解,所以我为我的Shadertoy程序简化了它:
vec2[3] derive(vec2[3] p)
{
vec2[3] dpoints;
int l_length = 0, j;
for (int i = 2; i > 0; --i) {
vec2[3] l;
for (j = 0; j < i; j++) {
vec2 dpt = vec2(
float(i) * (p[j + 1].x - p[j].x),
float(i) * (p[j + 1].y - p[j].y));
dpoints[l_length] = dpt;
l[l_length] = dpt; ++l_length;
}
p = l;
}
return dpoints;
}
Bezier.js程序继续为3d bezier添加功能,以防它与理性bezier有关。
我需要理解程序的其余部分,因为我不知道计算法线的理论。
大声说出Pomax的答案:
只使用最后一个计算值来制作"曲线"。(行)from origin.
权重计算为w'0 = 2(w1-w0), w'1 = 2(w2-w1)。
在t处得到的贝塞尔曲线是原始贝塞尔曲线在t处的正切。
我希望我没记错,我还没试过。