top >
C# > 解の公式による直線と曲線の交点計算
解の公式による直線と曲線の交点計算


(xi, yi は曲線の制御点)
直線と曲線との交点を計算するために作る式は、
3次ベジエ曲線の場合、3次の式となる。
(-f
0 + f
1 - f
2 + f
3)t
3 + (3f
0 - 2f
1 + f
2)t
2 +(-3f
0 + f
1)t + f
0 = 0
この式を、
3次方程式を解く で作成した関数を呼んで解く。
その中で、実数解で 0<=t<=1 のものが、交点となる。
//方程式版 public float[] intersection_line(float a, float b, float c) { double f0, f1, f2, f3; f0 = a * pts[0].X + b * pts[0].Y + c; f1 = 3 * (a * pts[1].X + b * pts[1].Y + c); f2 = 3 * (a * pts[2].X + b * pts[2].Y + c); f3 = a * pts[3].X + b * pts[3].Y + c; Complex[] complex = MyMath.cubiceq( -f0 + f1 - f2 + f3, 3 * f0 - 2 * f1 + f2, -3 * f0 + f1, f0); List<float> reslist = new List<float>(); for (int cnt = 0; cnt < 3; cnt++) { if (complex[cnt].real >= 0 && complex[cnt].real <= 1 && Math.Abs(complex[cnt].imag) < 0.0001) { reslist.Add((float)complex[cnt].real); } } float[] result; result = new float[reslist.Count]; for (int cnt = 0; cnt < reslist.Count; cnt++) { result[cnt] = reslist[cnt]; } return result; }