二次ベジェ曲線と直線の交点

Top »

直線 a*x + b*y + c = 0 と二次ベジェ曲線(x1,y1,x2,y2,x3,y3)の交点は高々2つある。

ベジェ曲線の数式

x = x(t) = (x3-2*x2+x1)*t^2 + 2*(x2-x1)*t + x1
y = y(t) = (y3-2*y2+y1)*t^2 + 2*(y2-y1)*t + y1

を直線の数式 a*x + b*y + c = 0 に代入すると、tについての二次方程式となる。

a*((x3-2*x2+x1)*t^2+2*(x2-x1)*t+x1) + b*((y3-2*y2+y1)*t^2+2*(y2-y1)*t+y1) + c = 0

展開して整理する

(a*(x3-2*x2+x1)+b*(y3-2*y2+y1))*t^2 + 2*(a*(x2-x1)+b*(y2-y1))*t + a*x1+b*y1+c = 0

l*t^2+m*t+n = とみなすと係数l,m,nは

l = a*(x3-2*x2+x1)+b*(y3-2*y2+y1)
m = 2*(a*(x2-x1)+b*(y2-y1))
n = a*x1+b*y1+c

判定して、二次方程式の解の公式に代入する。

delta = m^2-4*l*n

得られたtが0~1ではない場合はベジェ曲線の範囲外なので解ではない。tをベジェ曲線の数式に代入し交点x,yを得る。

inserted by FC2 system