2012-07-19 18 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