我有个问题。假设我们有一条由四个控制点定义的三次bezier曲线。现在假设,曲线从一个点切割,每个线段再次使用三次bezier曲线表示。那么,如果我们有两条这样的贝塞尔曲线B1和B2,有没有办法知道它们是否可以连接起来形成另一条贝塞尔曲线B?这是通过连接两条曲线来简化几何图形,并减少控制点的数量。
发布于 2011-11-10 12:46:40
关于这个问题的一些思考。我认为存在带有控制点P1和P2的初始贝塞尔曲线P0-P3

让我们在参数ta和tb上做两个细分。我们现在有两条子曲线(黄色)- P0-PA3和PB0-P3。蓝色间隔丢失。PA1和PB2 -已知的控制点。我们必须找到未知的P1和P2。
一些方程式
初始曲线:
C = P0*(1-t)^3+3*P1(1-t)^2*t+3*P2*(1-t)*t^2+P3*t^3端点:
PA3 = P0*(1-ta)^3+3*P1*(1-ta)^2*ta+3*P2*(1-ta)*ta^2+P3*ta^3
PB0 = P0*(1-tb)^3+3*P1*(1-tb)^2*tb+3*P2*(1-tb)*tb^2+P3*tb^3小曲线的控制点
PA1 = P0*(1-ta)+P1*ta => P1*ta = PA1 – P0*(1-ta)
PB2 = P2*(1-tb)+P3*tb => P2(1-tb) = PB2 – P3*tb现在替换PA3方程中的未知点:
**PA3***(1-tb) = **P0***(1-ta)^3*(1-tb)+3*(1-ta)^2*(1-tb)*(**PA1** – **P0***(1-ta))+3*(1-ta)*ta^2*( **PB2** – **P3***tb)+**P3***ta^3*(1-tb)(由于这样的格式化,一些乘法符号已经丢失)
这是一个向量方程,它包含两个关于两个未知数ta和tb的标量方程
PA3X*(1-tb) = P0X*(1-ta)^3*(1-tb)+3*(1-ta)^2*(1-tb)*(PA1X – P0X*(1-ta))+3*(1-ta)*ta^2*( PB2X – P3X*tb)+P3X*ta^3*(1-tb)
PA3Y*(1-tb) = P0Y*(1-ta)^3*(1-tb)+3*(1-ta)^2*(1-tb)*(PA1Y – P0Y*(1-ta))+3*(1-ta)*ta^2*( PB2Y – P3Y*tb)+P3Y*ta^3*(1-tb)这个系统可以用数值和解析两种方式解决(事实上,Maple用非常-非常大的立方公式来解决它:( )
如果我们有一些有误差的点,那么就有必要为一些点(PA3,PB0,PA2,PB1)建立超定方程系统,并用数值方法求解它,以最小化偏差。
发布于 2015-04-17 16:56:58
您将在这里找到一个非常简单的解决方案:https://math.stackexchange.com/a/879213/65203。
拆分Bezier时,由第一个截面的最后两个控制点和第二个截面的前两个控制点形成的向量是共线的,它们的长度比率决定了拆分处的参数值。验证公共控制点是否与参数值匹配是一件很容易的事情(以避免意外共线的情况)。
https://stackoverflow.com/questions/8054405
复制相似问题