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); }
// 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; }
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; } }