对于一条曲线,我想将起点和终点移动到新的位置,然后如何保持曲线的形状?

从黄色曲线上循环的点,移动到红色曲线上循环的红色曲线位置,如何保持红色曲线上曲线的形状?
发布于 2020-05-29 23:07:36
定义样条曲线时,还需要定义端点处的切线角度,当您将点移动到中心时,您正在改变边线的斜率,因此如果切线角度是固定的wrt线,则它们将使曲线发生变化。如果你仔细观察,你会发现两张图片上的角是一样的。为了保持曲线的形状,你需要根据侧线、坡度变化来改变这些角度。
发布于 2020-05-30 02:17:42
因此,让我在这里总结一下您要做的事情:给定一条Bezier曲线或一条B样条曲线,以及起点和终点的两个新位置,找到一条新的Bezier/B样条曲线,该曲线或多或少保持与原始曲线相同的形状。
实现这一点的一种方法是找到一个变换,将起点/终点变换到它们的新位置,然后可以将相同的变换应用于曲线的所有其他控制点。基本上,这与查找由曲线的起点P和终点Q定义的直线与由新点位置P*和Q*定义的另一条直线之间的转换是相同的。从P和P*,我们可以找到一个平移向量。从直线PQ和直线PQ,我们可以找到一个旋转角。从length |PO|和length |PQ|我们可以找到一个比例因子。因此,结合平移向量、旋转角和比例因子,我们将能够找到变换矩阵。将变换矩阵应用于所有其他控制点,那么您应该能够获得或多或少保持与原始曲线相同形状的新曲线。
如果你真正想要做的是抵消曲线,那么这是一个完全不同的故事。偏移曲线是通过一种复杂得多的算法实现的(我在这里不会详细说明),我们将指定偏移距离(可以是正数或负数,表示向外/向内偏移),而不是起点/终点的新位置。
https://stackoverflow.com/questions/62056077
复制相似问题