// clone this trajectory and replace the first segment with the two provided ones. public Trajectory insertAndClone(stsegment newseg1, stsegment newseg2) { var list = new List <stsegment>(Count); list.Add(newseg1); list.Add(newseg2); list.Concat(segments.Skip(1)); return(new Trajectory(list)); }
public Trajectory insert(Trajectory other) { stsegment e1 = this[0]; stsegment e2 = other[0]; // if inserting onto a segment of len 0, return without calculating if (e1.s1 == e1.s2) { return(insertAndClone(e1, e1)); } stpoint pt = e1.getProjection(e2.s2); stsegment newseg1 = new stsegment(e1.s1, pt); stsegment newseg2 = new stsegment(pt, e1.s2); return(insertAndClone(newseg1, newseg2)); }