提问人:Illari 提问时间:5/15/2022 更新时间:5/16/2022 访问量:113
了解无处可去的贝塞尔派生代码
Understanding Bezier derivation code that leads nowhere
问:
我正在尝试将计算法线的 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 贝塞尔添加功能,以防与理性贝塞尔有任何关系。
我需要理解程序的其余部分,因为我不知道计算法线的理论。
答:
0赞
Illari
5/16/2022
#1
大声拼出 Pomax 的答案:
仅使用最后的计算值,从原点制作“曲线”(直线)。
权重的计算公式为 w'0 = 2(w1-w0), w'1 = 2(w2-w1)。
得到的 t 处的贝塞尔给出了 t 处原始贝塞尔的正切值。
我希望我做对了,我还没有尝试过。
上一个:有理贝塞尔的透视投影
下一个:调整 2D 矩阵大小的基本算法
评论
vec2[3]
(x,y)
(y,-x)