Example #1
0
        private NwInterpolate ConvertInterpolate(IInterpolate ip)
        {
            if (ip is BezierInterpolate)
            {
                var i = ip as BezierInterpolate;
                return(new NwInterpolate()
                {
                    P1 = i.p1.ToVec2f(), P2 = i.p2.ToVec2f()
                });
            }
            else if (ip is LinearInterpolate)
            {
                return new NwInterpolate()
                       {
                           P1 = new Vector2f(0.25f, 0.25f), P2 = new Vector2f(0.75f, 0.75f)
                       }
            }
            ;
            else if (ip is SmoothstepInterpolate)
            {
                return new NwInterpolate()
                       {
                           P1 = new Vector2f(0.25f, 0.0f), P2 = new Vector2f(0.75f, 1.0f)
                       }
            }
            ;

            return(null);
        }
Example #2
0
    // Methods
    #region Protected Methods used in constructor
    // Prepare data to be used in Solve()
    protected override void PreProcessInputs()
    {
        // PreProcessInputs()
        // 1) fill missing data
        //      -find missing swap;
        //      -create them;
        //      -interpolate value of them according to interpolator
        // 2) Create PreProcessedData: merge missing data with starting available data

        // fill missing
        int MaxSwapTenor = OnlyGivenSwap.Last().Tenor.tenor;               // Max tenor of available swap
        List <BuildingBlock> MissingSwapList = new List <BuildingBlock>(); // List of missing swap

        // Add Missing Swap to MissingSwapList
        BuildingBlockFactory f = new BuildingBlockFactory(); // factory to create missing building block

        for (int i = 1; i < MaxSwapTenor; i++)
        {
            Period p = new Period(i, TenorType.Y); // needed period
            if (!OnlyGivenSwap.Any(bb => bb.Tenor.GetPeriodStringFormat() == p.GetPeriodStringFormat()))
            {
                // Check if in OnlyGivenSwap period "p" exists.
                // if not, it starts creating missing swap. Rate 0.0 just to initialise
                MissingSwapList.Add(f.CreateBuildingBlock(refDate, 0.0, p.GetPeriodStringFormat(), SwapType.buildingBlockType));
            }
        }

        // interpolate missing rate using given data: it interpolates directly on markets rate
        IEnumerable <double> xGivenDays = from c in OnlyGivenSwap
                                          select c.endDate.SerialValue;

        IEnumerable <double> yGivenSwap = from c in OnlyGivenSwap
                                          select c.rateValue;
        // Set up interpolator
        OneDimInterpFactory iFactory = new OneDimInterpFactory();
        IInterpolate        iSwap    = iFactory.FactoryMethod(MissingRateInterp, xGivenDays.ToArray(), yGivenSwap.ToArray());


        // Missing swap with interpolated value
        IEnumerable <BuildingBlock> MissingSwap = from c in MissingSwapList
                                                  select f.CreateBuildingBlock(c.refDate, iSwap.Solve(c.endDate.SerialValue), c.Tenor.GetPeriodStringFormat(), c.buildingBlockType);

        // Complete Filled data ready to be bootstrapped
        PreProcessedData = from c in BBArray.Union(MissingSwap)
                           orderby c.endDate.SerialValue ascending
                           select c;
    }
Example #3
0
        void Update()
        {
            if (fixedTimeController == null)
            {
                return;
            }
            if (ipl == null)
            {
                if (fixedTimeController is IInterpolate i)
                {
                    ipl = i;
                }
                else
                {
                    return;
                }
            }

            if (ipl.interpolate)
            {
                if ((ipl.interpolPos - pprev).magnitude < deltaPosThreshold)
                {
                    transform.position = Vector3.Slerp(pprev, ipl.interpolPos, Time.deltaTime / Time.fixedDeltaTime);
                }
                else
                {
                    transform.position = ipl.interpolPos;
                }
                pprev = transform.position;


                transform.rotation = Quaternion.Slerp(rprev, ipl.interpolRot, Time.deltaTime / Time.fixedDeltaTime);
                rprev = transform.rotation;
            }
            else
            {
                transform.position = ipl.interpolPos;
                transform.rotation = ipl.interpolRot;
            }
        }