当定义样条曲线时,还需要在端点处定义切线角度,当将点移动到中心时,您将确定边线的斜率,因此,如果切线角固定为wrt线,则它们将使曲线发生变化。如果您会仔细看到,两个图像的拐角角度相同。为了保持曲线形状,您需要根据边线的斜度改变这些角度。
所以,让我在这里总结一下您想做的事情:给定Bezier曲线或B样条曲线,以及两个新的起点和终点位置,找到一条或多或少保持不变的新Bezier / B样条曲线与原始曲线形状相同。
实现此目的的一种方法是找到一个将起点/终点转换到其新位置的变换,然后可以将相同的变换应用于曲线的所有其他控制点。基本上,这与找到由曲线的起点P和终点Q定义的线与由新点位置P *和Q *定义的另一条线之间的变换相同。从P和P *,我们可以找到翻译向量。从线PQ和线P Q,我们可以找到旋转角。从长度| PO |和长度| P Q |我们可以找到一个比例因子。因此,结合平移矢量,旋转角度和比例因子,我们将能够找到变换矩阵。将变换矩阵应用于所有其他控制点,则应该能够获得与原始曲线大致保持相同形状的新曲线。
如果您真正想做的是偏移曲线,那么这是一个完全不同的故事。偏移曲线是通过更为复杂的算法(在此不再赘述)来实现的,我们将指定偏移距离(可以为正或负,以表示向外/向内偏移),而不是起点/终点的新位置。