opengl 向心Catmull-Rom云形缐如何运作?

vyswwuz2  于 2022-11-04  发布在  其他
关注(0)|答案(3)|浏览(145)

this site,它似乎有关于Catmull-Rom样条的最详细的信息,它似乎需要四个点来创建样条,但是,它没有提到点p0和p3如何影响p1和p2之间的值。
我的另一个问题是,如何创建连续样条?通过使p4 = p2(即,假设我们有p0、p1、p2、p3、p4、p5、p6、......、pN),将点p1、p2定义为与p4、p5连续,是否会像定义点p4、p5那样简单?
一个更一般的问题是如何计算Catmull-Rom样条上的切线?是否必须在样条上取两个点(比如0.01、0.011),并根据这些输入值给出的位置坐标,根据毕达哥拉斯定理得到切线?

sf6xfgos

sf6xfgos1#

看一下等式2 --它描述了控制点如何影响直线。您可以看到点P0P3进入等式,沿着从P1P2的曲线绘制点。您还可以看到,当x1m5 n1 a时,等式给出P1,当t == 1时,等式给出P2
如果你有R0R1,... RN点,那么你可以用P0 = RK - 1P1 = RKP2 = RK + 1P3 = RK + 2的方程2来画出RKRK + 1之间的点。
除非添加额外的控制点来代替R - 1RN + 1,否则您无法绘制从R0R1或从RN - 1RN的曲线。一般的想法是,您可以选择要添加到序列头部和尾部的任何点,以便为自己提供计算样条的所有参数。
你可以通过在两条样条线之间放置一个控制点来连接它们。假设你有R0R1,...,RNS0S1,... SM,它们可以连接成R0R1,...,RN - 1S1。......一个月33个月1个月,......一个月34个月1个月。
要计算任意点的正切,只需对方程2求导。

ovfsdjhp

ovfsdjhp2#

Wikipedia article的深度更深一点。样条的一般形式将2个控制点和相关的切向量作为输入。如果公共控制点处的切向量相等,则可以添加额外的样条段,这保持了C1连续性。
在特定的Catmull-Rom形式中,中间点的切向量由相邻控制点的位置确定。因此,要创建通过多个点的C1连续样条,提供一组控制点以及第一个和最后一个控制点的切向量就足够了。我认为标准行为是使用P1 - P0作为P0处的切向量,并使用PN - PN-PN处1例。
根据Wikipedia文章,要计算控制点Pn处的切线,请使用以下方程:

T(n) = (P(n - 1) + P(n + 1)) / 2

这也回答了您的第一个问题。对于一组4个控制点,P1、P2、P3、P4在P2和P3之间内插值需要来自所有4个控制点的信息。P2和P3本身定义内插线段必须通过的端点。P1和P3确定内插线段在点P2处将具有的切向量。P4和P2确定线段在点P3处的切向量。控制点P2和P3处的切向量影响它们之间插值线段的形状。

8tntrjer

8tntrjer3#

这个pdf可以帮助你更好地理解。是的,为了计算切线,它们包括基于张力函数的前一点和下一点。
它也有派生。
https://www.cs.cmu.edu/~fp/courses/graphics/asst5/catmullRom.pdf

相关问题