public void add(T p, bool optimize) { if (!optimize || points.Count < 2) { points.Add(p); } else { T dir = mtt.diff(points.at(-1), points.at(-2)); dir = mtt.mul(1f / mtt.scalar(dir), dir); T pdir = mtt.diff(p, points.at(-2)); pdir = mtt.mul(1f / mtt.scalar(pdir), pdir); if (!mtt.eq(dir, pdir)) { points.Add(p); } else { points[points.Count - 1] = p; } } }
public override T getNodeTangent(int nodeIndex) { int i = getNodeIndex(nodeIndex); return(mtt.diff(p[i + 1], p[i])); }