我知道:
控制点a和d(2D立方贝塞尔曲线的起点和终点)
斜率a->b,c->d和b->c(b,c是其他控制点)
Bézier曲线的中点在哪里。
控制点a和d(2D立方贝塞尔曲线的起点和终点)
斜率a->b,c->d和b->c(b,c是其他控制点)
Bézier曲线的中点在哪里。
T0 = ( b - a ) / u0
T1 = ( c - b ) / u1
T2 = ( d - c ) / u2
b = a + T0*u0
c = b + T1*u1
d = c + T2*u2
这个问题还说明了我们有三次贝塞尔曲线的“中点”。我理解为我们有曲线参数范围的中间点。我将称这个点为p
:
p = ( a + 3*b + 3*c + d ) / 8
将未知数移到等式左边,重写为:
b + c = ( 8*p - a - d ) / 3
b
和c
。当我们有平行向量T0
,T1
或T2
时,就会出现歧义。有四种情况需要考虑。T0
不与T1
平行b = a + T0*u0
和c = a + T0*u0 + T1*u1
代入并解出u0
和u1
:2*T0*u0 + T1*u1 = ( 8*p - 7*a - d ) / 3
这是两个未知数的两个方程,因为T0
和T1
都是向量。将u0
和u1
代回b = a + T0*u0
和c = a + T0*u0 + T1*u1
中,以获得缺失的控制点b
和c
。
情况2: T1
与T2
不平行
将c = d - T2*u2
和b = d - T2*u2 - T1*u1
代入并解出u1
和u2
:
T1*u1 + 2*T2*u2 = ( a + 7*d - 8*p ) / 3
情况三:T0
与T2
不平行
将 b = a + T0*u0
和 c = d - T2*u2
代入,并解出 u0
和 u2
:
T0*u0 - T2*u2 = ( 8*p - 4*a - 4*d ) / 3
情况4: T0
, T1
和T2
都是平行的
在这种情况下,a
、b
、c
和d
都共线,并且T0
、T1
和T2
在一个比例因子内等效。没有足够的信息来获得唯一的解决方案。一个简单的解决方案是通过设置u0 = 1
来选择b
:
b = a + T0
(a + T0) + c = ( 8*p - a - d ) / 3
c = ( 8*p - 4*a - d - 3*T0 ) / 3
p 并不是必需的。在这种情况下,我们可以简单地解决这个方程,得到、和。
T0*u0 + T1*u1 + T2*u2 = d - a
u0
,u1
和u2
)。将其代入 b = a + T0*u0
和 c = b + T1*u1
或 c = d - T2*u2
中可得到b
和c
。假设您的斜率已经归一化,那么对于某些 u、v,您会有
u * slope(a->b)+a = b, v * slope(c->d)+d = c
你知道变量a、d和q:=(a+b+c+d)/8
的值(曲线的中点),因此c = 8(q-a-d-b)
将上述方程式代入最后一个方程式,即可得到:
v * slope(c->d)+d = 8(q-a-d-a-u * slope(a->b))
这是两个变量(u,v)的2个方程式(2D向量方程式)
你不需要第三个斜率。