twe*_*ypi 17 c++ opengl directx graphics spline
从这个似乎有关于catmull-rom splines的最详细信息的网站:http://www.mvps.org/directx/articles/catmull/ 它提到需要四个点来创建样条曲线.然而,它没有提到点p0和p3如何影响p1和p2之间的值.
我的另一个问题是如何创建连续样条线?通过使p4 = p2(假设我们有p0,p1,p2,p3,p4,p5,p6 ...... pN),将点p1,p2定义为与p4,p5连续是否容易.
一个更普遍的问题是如何计算catmull rom样条上的切线?它是否必须涉及在样条上取两个点(比如0.01,0.011)并根据毕达哥拉斯得到切线给定输入值给出的位置坐标?
看看等式2 - 它描述了控制点如何影响线.你可以看到点P0和P3进入方程沿曲线绘制点P1到P2.您还可以看到该方程给出了P1当t == 0和P2时t == 1.
该示例等式可以概括.如果你点R0,R1... RN那么你就可以绘制的点RK,并RK + 1利用公式2 P0 = RK - 1,P1 = RK,P2 = RK + 1和P3 = RK + 2.
你不能从剧情R0到R1或者从RN - 1到RN,除非你增加额外的控制点,以代替R - 1和RN + 1.一般的想法是,您可以选择要添加到序列的头部和尾部的任何点,以给自己计算样条曲线的所有参数.
您可以通过删除它们之间的一个控制点来将两个样条线连接在一起.假设你有R0,R1,...,RN和S0,S1... SM他们可以结合成R0,R1,..., ,,RN - 1 ,... .S1S2SM
要计算任何点的切线,只需采用等式2的导数即可.
在维基百科的文章进入多一点点深度.样条的一般形式将具有相关切向量的2个控制点作为输入.如果公共控制点处的切向量相等,则可以添加附加样条段,这保留了C1连续性.
在特定的Catmull-Rom形式中,中间点处的切向量由相邻控制点的位置确定.因此,为了通过多个点创建C1连续样条曲线,在第一个和最后一个控制点处提供一组控制点和切向量就足够了.我认为标准行为是使用P1-P0作为P0处的切向量和PN处的PN-PN-1.
根据维基百科的文章,要计算控制点Pn处的切线,可以使用以下公式:
T(n) = (P(n - 1) + P(n + 1)) / 2
Run Code Online (Sandbox Code Playgroud)
这也回答了你的第一个问题.对于一组4个控制点,P1,P2,P3,P4,P2和P3之间的插值需要所有4个控制点的信息.P2和P3本身定义插值段必须通过的端点.P1和P3确定插值段在点P2处将具有的切向量.P4和P2确定该段在点P3处将具有的切向量.控制点P2和P3处的切向量影响它们之间的插值段的形状.