对于由控制点P0,P1,P2和P3定义的三次Bézier曲线,其公式为
B(t)=(1−t)^3*P0 + 3(1−t)^2t*P1 + 3(1−t)t^2*P2 + t^3*P3
我们可以得到一个对应于任何t∈[0,1]的点。然而,根据我的收集,代数求解任何一个坐标变得非常繁琐和昂贵,至少对于一般的解决方案。
现在,假设我们有一个二维曲线B(t)=(x,y),具有dx / dt>的特定约束。对于所有0≤t≤1的0,即曲线可以向正x方向前进,但从不“向上/向下”或“向后”,是否有一种有效的算法(/代数操作技巧)来排序“样本”曲线的y相对于可以利用这个属性的恒定间隔Δx?
答案 0 :(得分:0)
我会回答我认为你在问的问题,而不是你实际问的问题,所以如果这不能覆盖它(即使它没有),你会想要更新你的帖子以澄清你真正的意思。
现在,假设我们有一个二维曲线B(t)=(x,y),具有dx / dt>的特定约束。对于所有0≤t≤1的0,即曲线可以向正x方向前进,但从不“向上/向下”或“向后”,是否有一种有效的算法(/代数操作技巧)来排序“样本”曲线的y相对于可以利用这个属性的恒定间隔Δx?
贝塞尔曲线是仿射变换不变的,因此任何符合此定义的曲线都可以旋转到不再适合该定义。假设您指的是一些规范形式,您可以通过对其应用旋转/平移来预处理曲线,使得第一个点位于(0,0),最后一个点是某个坐标(> 0,R) (即x坐标大于0,y坐标“任何实数”)。
鉴于此,您的约束意味着第一个控制点(确定t=0
处曲线处的切线)必须严格位于(0,0)的右侧。 y
坐标是无关紧要的(它只需要是一个实数),x
坐标可以是任何大于0的实数(甚至可以像IEEE浮点数允许的那样接近零)
相反,需要类似地接近结束坐标,因此对于任何结束坐标(例如,ey),关联的控制点(确定t=1
处的曲线切线)需要严格位于左侧(例如,EY);也就是说,y
坐标可以是任何内容,x
坐标必须小于ex
,但如果没有 ex
。
完成后,我们现在有一条符合您需求的曲线,使采样保持固定x
间隔:您有三种选择。
y
成为x
的表达,这是非常难以理解的。x
”的猜测,然后使用牛顿方法找到真实值您需要的下一个x
值。或者,x
值的值,您只需要进行简单查找。显然,除非你需要绝对的科学精确度,否则选项3将成为最佳选择。