MvG*_*MvG 13
是的,De Casteljau的算法是要走的路.
如果你的曲线是不正确的参数化牛逼 = 0槽牛逼 = 1,那么您似乎使用了错误的公式来descibe你的曲线.维基百科有适合您的公式:
B(t)=(1- t)3 P 1 + 3(1- t)2 t P 2 + 3(1- t)t 2 P 3 + t 3 P 4
[我将维基百科中从零开始的形式的指数调整到你的问题的基础上.]
如果设置t = 0,则得到P 1,即起点.如果设置t = 1,则得到P 4,即终点.在两者之间,曲线的形状由这些点和两个控制点P 2和P 3确定.
设t是您想要剪切曲线的参数.假设您只想保留初始部分.你绘制从P 1到P 2的三条线,从那里到P 3,从那里到P 4.这些线中的每条线在其长度的分数t处划分,即分割点之前的线的长度与整个长度相关为t:1.现在,您有三个新的点P 12到P 34.再次进行相同以获得两个点P 123和P 234,并再次获得单个点P 1234.最后一点是B(t),即截断曲线的终点.起点如前所述为P 1.新控制点是P 12和P 123,就像我们构建它们的方式一样.
删除曲线的初始部分的方式相同.因此,通过两个步骤,您可以修剪曲线的两端.您获得了一组新的控制点,这些控制点完全(最多使用您使用的数值精度)描述原始曲线的一段,没有任何近似或类似的参与.
您可以将上面的所有几何描述转换为代数公式,在完美的世界中,您应该从您引用的问题的答案中得出结果.
唉,这似乎不是一个完美的世界.在撰写本文时,这些公式仅使用二阶多项式,因此它们无法描述三度曲线上的端点.正确的公式应如下:
其中u 0 = 1 - t 0且u 1 = 1 - t 1.
请注意,在带括号的表达式中,至少有一些术语是相同的并且可以组合.我没有这样做,因为这里所说的公式将使模式更清晰,我相信.您可以单独为x和y方向执行这些计算,以计算新的控制点.