public Array splice(int start, int deleteCount = int.MaxValue, params as3.Object[] addElements) { var result = new Array(deleteCount); while (deleteCount-- > 0 && start < this.length) { result.Add(this[start]); vector.RemoveAt(start); } vector.AddRange(addElements); return(result); }
/// <summary> /// Defines the control points defining the tangent values for the first and last points. /// </summary> private static List <Point4> SolveCtrlPtsWithTangents(KnotVector knots, List <Point3> pts, Matrix coeffMatrix, int degree, Vector3 startTangent, Vector3 endTangent) { Matrix matrixLu = Matrix.Decompose(coeffMatrix, out int[] permutation); Matrix ptsSolved = new Matrix(); // Equations 9.11 double mult0 = knots[degree + 1] / degree; // Equations 9.12 double mult1 = (1 - knots[knots.Count - degree - 2]) / degree; // Solve for each dimension. for (int i = 0; i < 3; i++) { Vector b = new Vector { pts[0][i], startTangent[i] * mult0 }; // Insert the tangents at the second and second to last index. // Equations 9.11 b.AddRange(pts.Skip(1).Take(pts.Count - 2).Select(pt => pt[i])); // Equations 9.12 b.Add(endTangent[i] * mult1); b.Add(pts[pts.Count - 1][i]); Vector solution = Matrix.Solve(matrixLu, permutation, b); ptsSolved.Add(solution); } return(ptsSolved.Transpose().Select(pt => new Point4(pt[0], pt[1], pt[2], 1)).ToList()); }
public void VectorAddRange() { var vector = new Vector <int>(10); vector.AddRange(new List <int> { 1, 2, 3, 4, 5 }); Assert.AreEqual(vector.Count, 5); for (int i = 0; i < vector.Count; i++) { Assert.AreEqual(vector[i], i + 1); } }
public void AddRange() { var vector = new Vector <string> { "", null, "1" }; var system = new S.List <string> { "", null, "1" }; Comparer <string> .Compare(vector, system); vector.AddRange(Globals.Strings); system.AddRange(Globals.Strings); Comparer <string> .Compare(vector, system); }
public void TestAddRange() { int[] array = new int[]{0,1,2,3,4,5,6}; Vector<int> v = new Vector<int>(array); int[] splice = new int[]{-1,-2,-3}; v.AddRange(splice); Assert.AreEqual(array.Length+splice.Length, v.Count); Assert.AreEqual(5, v[5]); Assert.AreEqual(6, v[6]); Assert.AreEqual(-1, v[7]); Assert.AreEqual(-2, v[8]); Assert.AreEqual(-3, v[9]); v = new Vector<int>(array); v.AddRange(IteratorUtil.Begin(splice), IteratorUtil.End(splice)); Assert.AreEqual(array.Length+splice.Length, v.Count); Assert.AreEqual(5, v[5]); Assert.AreEqual(6, v[6]); Assert.AreEqual(-1, v[7]); Assert.AreEqual(-2, v[8]); Assert.AreEqual(-3, v[9]); }
/// <summary> /// 具有约束条件的参数平差的无限权解法解算模糊度固定。 /// </summary> /// <param name="totalFloat"></param> /// <param name="fixedAmbiguities"></param> /// <returns></returns> public WeightedVector GetResultByWeighedParamAdjust(WeightedVector totalFloat, WeightedVector fixedAmbiguities) { if (fixedAmbiguities.Count == 0) { return(totalFloat); } int totalParamCount = totalFloat.Count; //待估参数个数 int fixedAmbiCount = fixedAmbiguities.Count; //平差系数阵 var PA = new Matrix(totalFloat.Weights); var LA = new Matrix((IVector)totalFloat, true) { RowNames = totalFloat.ParamNames }; var A = DiagonalMatrix.GetIdentity(totalParamCount);//A x = l var LB = new Matrix((IVector)fixedAmbiguities, true) { RowNames = fixedAmbiguities.ParamNames }; var PB = new Matrix(fixedAmbiguities.Weights); Matrix B = BuildCoeefOfFixedToFloat(totalFloat, fixedAmbiguities); var BTBP = B.Trans * PB; //A 为单位阵,不需要计算 var NA = PA; //AT * P * A var UA = PA * LA; //AT * P * L UA.ColNames = new List <string>() { "Names" }; NA.ColNames = totalFloat.ParamNames; UA.RowNames = totalFloat.ParamNames; NA.RowNames = totalFloat.ParamNames; var NB = BTBP * B; var UB = BTBP * LB; UB.ColNames = new List <string>() { "Names" }; NB.ColNames = totalFloat.ParamNames; UB.RowNames = totalFloat.ParamNames; NB.RowNames = totalFloat.ParamNames; MatrixEquation neA = new MatrixEquation(NA, UA); MatrixEquation neB = new MatrixEquation(NB, UB); var eq = neA + neB; var result = eq.GetEstimated(); //整体矩阵验证, 2018.10.20, czs, in hmx, 已经验证与整体平差一致,但是如果权太大如1e40,则可能出现舍入误差,而失真!! if (false) { Matrix AB = new Matrix(A.RowCount + B.RowCount, A.ColCount); AB.SetSub(A); AB.SetSub(B, A.ColCount); Matrix PAB = new Matrix(PA.RowCount + PB.RowCount); PAB.SetSub(PA); PAB.SetSub(PB, PA.RowCount, PA.ColCount); Vector LAB = new Vector(totalFloat); LAB.AddRange(fixedAmbiguities); ParamAdjuster paramAdjuster = new ParamAdjuster(); var result2 = paramAdjuster.Run(new AdjustObsMatrix(new WeightedVector(LAB, PAB.Inversion), AB)); } return(result); }
public static Cons FormatCode(Cons template, params object[] args) { var result = new Vector(); foreach (var item in template) { if (item is Symbol) { var sym = (Symbol)item; if (sym.Name.StartsWith("%%")) { int index; if (int.TryParse(sym.Name.Substring(2), out index)) { result.AddRange((Cons)args[index - 1]); continue; } } else if (sym.Name.StartsWith("%")) { int index; if (int.TryParse(sym.Name.Substring(1), out index)) { result.Add(args[index - 1]); continue; } } } if (item is Cons) { result.Add(FormatCode((Cons)item, args)); continue; } result.Add(item); } return AsList(result); }
public static Expression CompileTry(Cons form, AnalysisScope scope) { var tryForms = new Vector(); var catchForms = new List<Cons>(); var cleanupForms = new Vector(); foreach (var expr in Cdr(form)) { if (expr is Cons) { var list = (Cons)expr; var head = First(list); if (head == Symbols.Catch) { catchForms.Add(Cdr(list)); continue; } else if (head == Symbols.Finally) { cleanupForms.AddRange(Cdr(list)); continue; } } tryForms.Add(expr); } if (cleanupForms.Count != 0) { return CompileTryCatchFinally(AsList(tryForms), catchForms, AsList(cleanupForms), scope); } else if (catchForms.Count != 0) { return CompileTryCatch(AsList(tryForms), catchForms, scope); } else { return CompileBody(AsList(tryForms), scope); } }