贝塞尔曲线

发布时间 2023-08-11 14:05:13作者: 九叶草

贝塞尔曲线历史

由法国工程师皮埃尔·贝济埃所发表,他运用贝塞尔曲线来为汽车的主体进行设计。贝塞尔曲线最初由Paul de Casteljau于1959年运用de Casteljau算法开发,以稳定数值的方法求出贝塞尔曲线。

一阶贝塞尔曲线

一阶贝塞尔曲线主要是用来绘制一条线的,但是如果你想要绘制曲线,那就需要使用二阶或者三阶了。
img
img1
对于下面的t值,我们假设t所在的位置为C,P0所在的点为A,P1所在的点为B,则t=AC:AB。

vec2 fun1(vec2 p0, vec2 p1, float t){
 return p0*(1-t)+p1*t;
}

同样,我们也可以使用GLSL中的mix来计算。

 vec2 fun1(vec2 p0, vec2 p1, float t){
  return mix(p0, p1, t);
}

二阶贝塞尔曲线

img1
img3
img2
这里的t=DF:DE=AD:AB=BE:BC

vec2 fun2(vec2 p0, vec2 p1, vec2 p2, float t){
  vec2 q0 = mix(p0, p1, t);
  vec2 q1 = mix(p1, p2, t);
  vec2 b = mix(q0, q1, t);
  return b;
}

三阶贝塞尔曲线

img1
这里的t=AE:AB=BF:BC=CG:CD=EH:EF=FI:FG=HJ:HI

vec2 fun23(vec2 p0, vec2 p1, vec2 p2, vec2 p3, float t){
  vec2 q0 = mix(p0, p1, t);
  vec2 q1 = mix(p1, p2, t);
  vec2 q2 = mix(p2, p3, t);
  vec2 r0 = mix(q0, q1, t);
  vec2 r1 = mix(q1, q2, t);
  vec2 b = mix(r0, r1, t);
  return b;
}