2012-07-19 45 views
1

之间绘制曲线基本上我希望在OpenGL绘制3点之间的曲线下面的图像指示。我找到了几段代码,这些代码对于使用4点绘制贝塞尔曲线很有用,但是对于我没有取得成功的3点来说很有用。的OpenGL:3分

enter image description here

+3

注:贝塞尔曲线不会去通过P2。 – Howard 2012-07-19 18:54:51

+0

看http://asymptote.sourceforge.net/doc/Bezier-curves.html如何控制点和中点被用来构建一个贝塞尔曲线。在你的情况下,你知道终点和中点'm5' – ja72 2012-07-19 19:22:34

回答

7

从您有以下公式贝塞尔曲线(每个X,Y分量)的定义:

x(t) = (1-t)^3*p1x + 3*t*(1-t)^2*c1x + 3*t^2*(1-t)*c3x + t^3*p3x 
y(t) = (1-t)^3*p1y + 3*t*(1-t)^2*c1y + 3*t^2*(1-t)*c3y + t^3*p3y 

Bezier Constructions

在你的情况,你知道的中点(p2x,p2y)。您还可以假设c1xc2x具有相同的值;并且c1yc2y也具有相同的值

因此,我们在t被求解c1x=c2xc1y=c2y

c1x = c2x = -(p1x-8*p2x+p3x)/6 
c1y = c2y = -(p1y-8*p2y+p3y)/6 

以下等式= 0.5

p2x = (3/4)*c1x+(p1x+p3x)/8 
p2y = (3/4)*c1y+(p1y+p3y)/8 

,得到最终

012:贝塞尔方程在点 (p1x,p1y)(p2x,p2y)(p3x,p3y)方面使用
x(t) = (1-t)^3 *  [p1x] 
    + 3*t*(1-t)^2 * [-(p1x-8*p2x+p3x)/6] 
    + 3*t^2*(1-t) * [-(p1x-8*p2x+p3x)/6] 
    + t^3 *   [p3x] 

y(t) = (1-t)^3 *  [p1y] 
    + 3*t*(1-t)^2 * [-(p1y-8*p2y+p3y)/6] 
    + 3*t^2*(1-t) * [-(p1y-8*p2y+p3y)/6] 
    + t^3 *   [p3y] 

摘要

尝试四个控制点

  1. (p1x, p1y)
  2. (-(p1x-8*p2x+p3x)/6, -(p1y-8*p2y+p3y)/6)
  3. (-(p1x-8*p2x+p3x)/6, -(p1y-8*p2y+p3y)/6)
  4. (p3x, p3y)

这里是我与p1=(0,0)p2=(2,2)p3=(4,-1)制成的例子。余计算的以下控制点

  1. (0, 0)
  2. (2, 17/6)
  3. (2, 17/6)
  4. (4, -1)

的结果如下所示:

Derive Plot