示例#1
0
    void Update()
    {
        switch ((int)tweenType)
        {
        case (int)enCurveEquation.ArchimedeanSpiral:
            transform.position = CurveEquation.ArchimedeanSpiral(nowTime * _time, 使用蚊香曲线?蚊香曲线.Evaluate(nowTime) * 蚊香半径:蚊香半径);
            break;

        case (int)enCurveEquation.Parabola:
            //Arg1 趋于0 则抛物线趋于平行线
            transform.position = CurveEquation.Parabola(2 * nowTime * _time - _time, 焦准距);
            break;

        case (int)enCurveEquation.Sinusoid:
            transform.position = CurveEquation.Sinusoid(nowTime, 振幅, 偏距, 角速度, 初相);
            break;

        case (int)enCurveEquation.Cardioid:
            transform.position = CurveEquation.Cardioid(nowTime * _time, 心形半径, 花瓣数);
            break;

        case (int)enCurveEquation.Damping:
            transform.position = CurveEquation.Damping(nowTime * _time, 阻尼振幅, 阻尼衰减度, 阻尼频率);
            break;
        }
        DebugLine.Instance.AddLine(transform.position);
    }
示例#2
0
        private static Point SplitByNextIntersection(Point startPoint, SegmentBase segment, out SegmentBase segment1, out SegmentBase segment2,
                                                     CurveEquation equation,
                                                     Func <double, Point, SegmentBase> factory1,
                                                     Func <double, SegmentBase> factory2)
        {
            var intersection = segment.Intersections.Select(x => new { Point = x, T = equation.GetT(x) }).MinBy(x => x.T);
            var t            = Math.Min(Math.Max(intersection.T, 0), 1);
            var point        = equation.GetPoint(t);

            segment1 = point == startPoint ? null : factory1(t, intersection.Point);
            if (point == segment.EndPoint)
            {
                segment2 = null;
                Debugger.BreakWhen(segment.Intersections.Count > 1);
            }
            else
            {
                segment2 = factory2(t);
                segment2.Intersections.AddRange(segment.Intersections.Where(x => x != intersection.Point));
            }
            return(intersection.Point);
        }
示例#3
0
 public Curve(CurveEquation equation)
 {
     _equation = equation;
 }
示例#4
0
 public Curve(CurveEquation equation)
 {
     _equation = equation;
 }