立方贝塞尔曲线段

Abs*_*lom 4 math graphics bezier coordinates

如果我有4个点描述贝塞尔曲线P1,P2,P3,P4(其中P1和P4是曲线的终点,P2和P3是曲线的控制点),我怎么能找到描述的点只是这个贝塞尔曲线的一部分?

我发现这个答案正是我正在寻找的,但答案似乎错了.如果我在应该代表整个贝塞尔曲线的方程中设置t0 = 0和t1 = 1,则结果点无效.它们不等于原始点.

似乎该解决方案与De Casteljau的算法有关,但我无法理解它是如何工作的.

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 2P 3确定.

De Casteljau的算法

t是您想要剪切曲线的参数.假设您只想保留初始部分.你绘制从P 1P 2的三条线,从那里到P 3,从那里到P 4.这些线中的每条线在其长度的分数t处划分,即分割点之前的线的长度与整个长度相关为t:1.现在,您有三个新的点P 12P 34.再次进行相同以获得两个点P 123P 234,并再次获得单个点P 1234.最后一点是B(t),即截断曲线的终点.起点如前所述为P 1.新控制点是P 12P 123,就像我们构建它们的方式一样.

删除曲线的初始部分的方式相同.因此,通过两个步骤,您可以修剪曲线的两端.您获得了一组新的控制点,这些控制点完全(最多使用您使用的数值精度)描述原始曲线的一段,没有任何近似或类似的参与.

您可以将上面的所有几何描述转换为代数公式,在完美的世界中,您应该从您引用的问题的答案中得出结果.

唉,这似乎不是一个完美的世界.在撰写本文时,这些公式仅使用二阶多项式,因此它们无法描述三度曲线上的端点.正确的公式应如下:

  • P" 1 = ü 0 ü 0 ü 0 P 1 +(0 ü 0 ü 0 + ü 0 0 ü 0 + ü 0 ü 0 0)P 2 +(0 0 ü 0 + ü 0 0 t 0 + t 0 u 0 t 0)P 3 + t 0 t 0 t 0 P 4
  • P" 2 = û 0 ü 0 Ü 1 P 1 +(0 Ü 0 Ü 1 + ü 0 0 Ü 1 + ü 0 Ü 0 1)P 2 +(0 0 Ü 1 + ü 0 0 t 1 + t 0 u 0 t 1)P 3 + t 0 t 0 t 1 P 4
  • P" 3 = Ü 0 Ü 1 Ü 1 P 1 +(0 Ü 1 Ü 1 + Ü 0 1 Ü 1 + Ü 0 Ü 1 1)P 2 +(0 1 Ü 1 + Ü 0 1 t 1 + t 0 u 1 t 1)P 3 + t 0 t 1 t 1 P 4
  • P" 4 = Ü 1 Ü 1 ù 1 P 1 +(1 Ü 1 Ü 1 + Ü 1 1 Ü 1 + Ü 1 Ü 1 1)P 2 +(1 1 Ü 1 + Ü 1 1 t 1 + t 1 u 1 t 1)P 3 + t 1 t 1 t 1 P 4

其中u 0 = 1 - t 0u 1 = 1 - t 1.

请注意,在带括号的表达式中,至少有一些术语是相同的并且可以组合.我没有这样做,因为这里所说的公式将使模式更清晰,我相信.您可以单独为xy方向执行这些计算,以计算新的控制点.