IAp*_*App 1 bezier opengl-es cocos2d-iphone
基本上我希望在openGL中绘制3点之间的曲线,如下图所示.我发现了几段代码,这对于使用4点绘制贝塞尔曲线非常有用,但是对于3点,我确实没有成功.

根据贝塞尔曲线的定义,您可以得到以下公式(对于每个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
Run Code Online (Sandbox Code Playgroud)

在你的情况下,你知道中点(p2x,p2y).您也可以假设c1x 并 c2x具有相同的值; 并且c1y 和 c2y也有同样的价值
所以我们在t = 0.5时有以下等式
p2x = (3/4)*c1x+(p1x+p3x)/8
p2y = (3/4)*c1y+(p1y+p3y)/8
Run Code Online (Sandbox Code Playgroud)
这是解决了c1x=c2x,并c1y=c2y用
c1x = c2x = -(p1x-8*p2x+p3x)/6
c1y = c2y = -(p1y-8*p2y+p3y)/6
Run Code Online (Sandbox Code Playgroud)
给出最终的贝塞尔方程用于点(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]
Run Code Online (Sandbox Code Playgroud)
摘要
尝试四个控制点
( p1x, p1y )( -(p1x-8*p2x+p3x)/6, -(p1y-8*p2y+p3y)/6 )( -(p1x-8*p2x+p3x)/6, -(p1y-8*p2y+p3y)/6 )( p3x, p3y )这是我用的一个例子p1=(0,0),p2=(2,2)和p3=(4,-1).我计算了以下控制点
( 0, 0 )( 2, 17/6 )( 2, 17/6 )( 4, -1)结果如下所示:

| 归档时间: |
|
| 查看次数: |
2885 次 |
| 最近记录: |