Algorithm 无需蛮力/查找表查找bezier的alp点

Algorithm 无需蛮力/查找表查找bezier的alp点,algorithm,bezier,Algorithm,Bezier,我希望沿曲线参数化弧长(即等距间隔)点。我可以用德卡斯特卢和毕达哥拉斯来循环。当曲线是静态曲线时,此选项有效,但如果曲线是动态曲线,则会出现抖动。我还尝试了三次多项式,给出了与de Casteljau预期相同的点 有没有办法改变这些函数中的一个,以便在没有回路/阵列的情况下有效地获得alp点?近似值很好 float lerp(float A, float B, float C) { return A*(1-C)+B*C; } float bezierPoint_lerp(float A,

我希望沿曲线参数化弧长(即等距间隔)点。我可以用德卡斯特卢和毕达哥拉斯来循环。当曲线是静态曲线时,此选项有效,但如果曲线是动态曲线,则会出现抖动。我还尝试了三次多项式,给出了与de Casteljau预期相同的点

有没有办法改变这些函数中的一个,以便在没有回路/阵列的情况下有效地获得alp点?近似值很好

float lerp(float  A, float B, float C) {
  return A*(1-C)+B*C;
}

float bezierPoint_lerp(float A, float B, float C, float D, float T) { 
  return lerp(lerp(lerp(A, B, T), lerp(B, C, T), T), 
              lerp(lerp(B, C, T), lerp(C, D, T), T), T);
}

float bezierPoint_pow(float A, float B, float C, float D, float T) { 
  return A * pow(1-T,3) + 
         B * 3 * pow(1-T,2) * T +
         C * 3 * (1-T) * pow(T,2) + 
         D * pow(T,3);
}

一般来说,不能以符号的方式对弧长重新参数化曲线,所以最好的办法是在绘制曲线时,按字面上的意思标记等距点。在绘制曲线之前,先计算曲线长度,然后在屏幕上绘制曲线的像素时,进行近似距离聚合,并在点击“与上一个坐标大致相同的距离”的坐标时,将其标记在自己的列表中。在绘制完曲线的同时,继续这样做,然后在最后,您会有一个专门的简短列表,其中仅包含“alp”点中涉及的坐标。

什么是
alp点
?弧长参数化/等距点