Graphics 如何获得hermite样条曲线中端点的斜率?

Graphics 如何获得hermite样条曲线中端点的斜率?,graphics,spline,Graphics,Spline,因此,埃尔米特曲线中非端点P1的斜率为(P2-P0)/2。但是,如果我不希望斜率为0,你怎么得到端点的斜率呢?我猜你指的是由两个端点和一个(内部)控制点定义的二次Bezier曲线,因为Hermite曲线已经由切线向量定义了(其中斜率仅为Ri y/Ri x,i=0..1,其中R0和R1为切向量)。此外,Hermite曲线为三次曲线,有4个控制点,即2个内部控制点 因此,对于由P0,P1,P2定义的二次Bezier曲线,端点处的切线=点P0和P3,仅为 T0=P1-P0 T1=P2-P1 所以斜坡是

因此,埃尔米特曲线中非端点P1的斜率为(P2-P0)/2。但是,如果我不希望斜率为0,你怎么得到端点的斜率呢?

我猜你指的是由两个端点和一个(内部)控制点定义的二次Bezier曲线,因为Hermite曲线已经由切线向量定义了(其中斜率仅为Ri y/Ri x,i=0..1,其中R0和R1为切向量)。此外,Hermite曲线为三次曲线,有4个控制点,即2个内部控制点

因此,对于由P0,P1,P2定义的二次Bezier曲线,端点处的切线=点P0和P3,仅为

T0=P1-P0
T1=P2-P1

所以斜坡是

s0=T0 y/T0 x
s1=T1 y/T1 x

这就是为什么这些曲线如此有用的原因,因为它们是由我们为了设计目的而想要控制的特征定义的(通过将控制点放置在通过公共端点的直线上实现线段之间的连续性)

二次贝塞尔曲线也可以被视为退化的三次贝塞尔曲线,其中两个内部控制点重合(它们是同一点);因此,将“3点”曲线转换为埃尔米特曲线的第一步是复制生成三次贝塞尔曲线的中点

B0=P0
B1=P1
B2=P1
B3=P2

然后,使用Foley和Van Dam(交互式计算机图形学基础)的方程式(13.32),可以通过矩阵乘法生成Hermite形式

G_h = [ [ H_0 ]   = [ [  1  0  0  0 ]   [ [ B_0 ]    = M_hb G_b
        [ H_1 ]       [  0  0  0  1 ]     [ B_1 ]
        [ T_0 ]       [ -3  3  0  0 ]     [ B_2 ]
        [ T_1 ] ]     [  0  0 -3  3 ] ]   [ B_3 ] ]
即,两个端点是相同的(H0=B0,H1=B3),切向量只是相关点的加权和(T0=-3*B0+3*B1,T1=-3*B2+3*B3)


这里的切向量在大小上与上面的第一个定义不同,但方向(因此,斜率)是相同的。

我猜您是指由两个端点和一个(内部)控制点定义的二次Bezier曲线,因为Hermite曲线已经由切向量定义(其中斜率仅为Ri y/Ri x,i=0..1,其中R0和R1为切向量)。此外,Hermite曲线为三次曲线,有4个控制点,即2个内部控制点

因此,对于由P0,P1,P2定义的二次Bezier曲线,端点处的切线=点P0和P3,仅为

T0=P1-P0
T1=P2-P1

所以斜坡是

s0=T0 y/T0 x
s1=T1 y/T1 x

这就是为什么这些曲线如此有用的原因,因为它们是由我们为了设计目的而想要控制的特征定义的(通过将控制点放置在通过公共端点的直线上实现线段之间的连续性)

二次贝塞尔曲线也可以被视为退化的三次贝塞尔曲线,其中两个内部控制点重合(它们是同一点);因此,将“3点”曲线转换为埃尔米特曲线的第一步是复制生成三次贝塞尔曲线的中点

B0=P0
B1=P1
B2=P1
B3=P2

然后,使用Foley和Van Dam(交互式计算机图形学基础)的方程式(13.32),可以通过矩阵乘法生成Hermite形式

G_h = [ [ H_0 ]   = [ [  1  0  0  0 ]   [ [ B_0 ]    = M_hb G_b
        [ H_1 ]       [  0  0  0  1 ]     [ B_1 ]
        [ T_0 ]       [ -3  3  0  0 ]     [ B_2 ]
        [ T_1 ] ]     [  0  0 -3  3 ] ]   [ B_3 ] ]
即,两个端点是相同的(H0=B0,H1=B3),切向量只是相关点的加权和(T0=-3*B0+3*B1,T1=-3*B2+3*B3)


这里的切线向量在大小上与上面的第一个定义不同,但方向(因此,斜率)是相同的。

计算埃尔米特样条曲线时,不需要提供端点的切线吗?如果提供切线作为控制点,它将是(c0.y-p0.y)/(c0.x-p0.x)对于第一个端点,(c1.y-p1.y)/(c1.x-p1.x)对于第二个端点。(一定要注意分母中的0!)哇,2天没有,我们都会在几分钟内做出响应!你不需要提供端点的切线来计算埃尔米特样条曲线吗?如果你提供切线作为控制点,那就太简单了第一个端点为(c0.y-p0.y)/(c0.x-p0.x),第二个端点为(c1.y-p1.y)/(c1.x-p1.x)(请务必注意分母中的0!)哇,两天没有,我们都在几分钟内回复!谢谢!如果Hermite曲线仅由4个控制点定义,那么到目前为止只有3个指定点时会发生什么?Bezier曲线以这种方式似乎更有用…Catmull Rom样条曲线呢?我以为它们与Hermite相同,但我猜切线创建是指定的对于Hermite曲线,自动用于Catmull Rom,因为有方程T=(P2-P0)/2。在这种情况下,有没有方法计算端点的切线?或者贝塞尔曲线是唯一可以这样做的曲线/样条曲线?贝塞尔曲线由点定义(3表示二次曲线,4表示三次曲线,5表示四次曲线,…);Hermite曲线由两个端点和两个切线向量定义,可以转换为三次Beziers曲线或从三次Beziers曲线转换而来。我不完全确定Catmull Rom样条曲线。我的论文由Catmull撰写(在Herbert Freeman主编的《交互式计算机图形学教程和精选读物》和Kellogg S.Booth主编的《计算机图形学教程》)所有这些都与Beziers一起工作,因此我认为它们是相同的或易于转换的……这是所有这些(以及与它们一起工作的数学)的最佳来源是Foley and Van Dam,交互式计算机图形学基础。谢谢,我会看看这本书并尝试曲线转换。我在这里复制了相关的方程式。结果很容易应用,但这本书应该对理解有很大帮助。我还依赖于Bill Casselman的数学插图,它使用PostScript语言ge的编程示例。谢谢!如果Hermite曲线仅由4个控制点定义,那么到目前为止只有3个指定点时会发生什么?Bezier曲线在这种情况下似乎更有用…Catmull Rom样条曲线呢?我以为它们是