2012-03-14 62 views
6

我有一个关于通过控制点弯曲公式的问题。如您所知,HTML画布有quadraticCurveTo(x1, y1, x2, y2)x1 and x2是控制点。解释 - 通过控制点曲线的公式

但是,当您尝试使用它绘制笔画时,笔画将永远不会触摸控制点。

所以我们有这样的公式:

x1 = xt * 2 - (x0 + x2)/2; 
y1 = yt * 2 - (y0 + y2)/2; 

(xt, yt) =您通过想曲线的交点。切线,因为它在那个点上是90度垂直。

重新计算控制点的位置。

我从一本书中得到了这个公式,但是这本书没有解释它是如何派生的。我尝试谷歌,但徒劳无功。

任何人都知道这个公式是如何派生的?

谢谢, 维恩。

+0

这是从http://stackoverflow.com/questions/6711707/draw-a-quadratic-bezier-curve-through-three-give任何人想知道的点数 – mowwwalker 2013-03-15 03:15:35

回答

2

二次贝塞尔曲线由方程描述:

x(t) = x0 * (1-t)^2 + 2 * x1 * t * (1 - t) + x2 * t^2(和y的相似(t))的。

如果我们将参数值t = 1/2(以某种方式 - 曲线的中间),我们将得到您的公式:

x(t=1/2) = xt = x0 * 1/4 + 2 * x1 * 1/4 + x2 * 1/4

然后

x1/2 = xt - (x0 + x2)/4

x1 = 2 * xt - (x0 + x2)/2

+0

感谢您的帮助!这很棒。 – Vennsoh 2012-03-16 01:45:05

0

这叫做Spline。更重要的是,他们似乎正在使用Bezier Curve

+0

谢谢,但我仍然没有得到它如何x1 = xt * 2 - (x0 + x2)/ 2; y1 = yt * 2 - (y0 + y2)/ 2; y1 = y2 *正在派生。 – Vennsoh 2012-03-14 22:03:42

+0

@Vennsoh:编辑我的答案,我相信他们正在使用二次贝塞尔曲线。查看链接的wiki文章中的推导。 – mindvirus 2012-03-14 22:17:16