Math 如何缩放贝塞尔曲线(使用HTML5画布)?

Math 如何缩放贝塞尔曲线(使用HTML5画布)?,math,canvas,drawing,bezier,Math,Canvas,Drawing,Bezier,我有一个贝塞尔路径,存储为几个点的数组,每个点都是坐标数组,形式为[cp1x,cp1y,cp2x,cp2y,x,y] 我希望能够上下缩放这条路径来调整它的大小,但我不知道怎么做。我尝试对每个坐标值应用一个系数,但似乎不起作用 有人知道如何实现这一点吗?在标准表示法中,点p表示空间中的实际点,因此可以像其他点一样移动它们。也就是说,通过你的缩放因子来缩放它们,把所有的东西都放大:假设它是a,那么这就是[a*cp1x,a*cp1y,a*cp2x,a*cp2y,a*x,a*y],或者如果你想分别缩放x

我有一个贝塞尔路径,存储为几个点的数组,每个点都是坐标数组,形式为[cp1x,cp1y,cp2x,cp2y,x,y]

我希望能够上下缩放这条路径来调整它的大小,但我不知道怎么做。我尝试对每个坐标值应用一个系数,但似乎不起作用


有人知道如何实现这一点吗?

在标准表示法中,点p表示空间中的实际点,因此可以像其他点一样移动它们。也就是说,通过你的缩放因子来缩放它们,把所有的东西都放大:假设它是
a
,那么这就是
[a*cp1x,a*cp1y,a*cp2x,a*cp2y,a*x,a*y]
,或者如果你想分别缩放
x
y
,你可以对
x
y
组件使用不同的因子


还请注意,这将相对于原点缩放对象
(x=0,y=0)
,因此,如果原点没有任何曲线,它可能看起来像一个偏移。如果要消除此偏移的影响,可以分别从
x
y
值中减去
Px
Py
,其中
Px
Py
是缩放时不希望移动的点,然后再进行缩放(如果愿意,可以在进行多次缩放后再添加)。但是如果你想缩放整个画布,比如从5x5英寸到7x7英寸,你会想在不移位的情况下进行乘法运算(在本例中是7./5)。

当你缩放时,曲线的哪一部分会保持固定,一端还是中心?我没有任何具体的想法,但我会假设居中。我可以问一下,如果缩放不在原点的贝塞尔曲线的等式是:moveTo原点为x=5,y=6,让函数f(a,cpX,x)=(a*(x-cpXx))+x,因此[带虚拟值][f(a,1,5),f(a,4,6),f(a,8,5),f(a,10,6),f(a,14,5),f(a,14,6)]我试图在一个上下文上绘制一系列曲线,该上下文本身会根据屏幕的大小进行缩放。当上下文重新缩放时,我希望曲线以屏幕区域的百分比(在本例中为var a)进行适当缩放。我的意思是:f(a,cpX,x)=(a*(x-cpX))+x(从cpX中取出一个额外的x)。堆栈溢出不允许我编辑我的评论。@CristianCavalli:我不完全理解你的问题/评论。最好是作为一个单独的问题提问,在这里你可以举例、编辑等等。