/// <summary> /// 初始化匀速贝塞尔路径运动 /// </summary> /// <param name="points">贝塞尔点(0:P1, 1:P1右控制点, 2:P2_左控制点, 3: P2)</param> /// <param name="fullTime">完成曲线运动的期望总时间(ms)</param> /// <param name="interval">精度</param> /// <param name="UniformBezierRouteCallBack">匀速化贝塞尔点回调函数</param> public BezierRoute(Point[] points, int fullTime, int interval, UniformBezierRouteCallBack uniformBezierRouteCallBack) { Start = false; FullTime = fullTime; Interval = interval; CallBack = uniformBezierRouteCallBack; timer = new Timer(interval); timer.Elapsed += Timer_Elapsed; this.points = points; b3 = new Bezier_3(); length = b3.beze_length(points, 1); for (int i = 0; i < points.Length && i < 4; i++) { switch (i) { case 0: P1 = points[0]; break; case 1: P1_Control = points[1]; break; case 2: P2_Control = points[2]; break; case 3: P2 = points[3]; break; default: break; } } }
static void Main(string[] args) { Bezier_3 b3 = new Bezier_3(); // 输出 t=0.5 对应的匀速 rt Point[] p = new Point[4]; p[0] = new Point(100, 611); p[1] = new Point(300, 411); p[2] = new Point(400, 311); p[3] = new Point(500, 411); Console.WriteLine(b3.t2rt(p, 0.05)); }