bc = NurbsCurve.ByControlPoints(Point.ByCoordinates([0,10,40,50],[0,20,20,0]));
cp = bc.PointAtParameter(0..1..#ct);
cn = bc.NormalAtParameter(0..1..#ct);
ds = Math.Sin(0..360*ps..#ct)*2;
ic = Math.RemapRange(at.DistanceTo(cp),as,0);
nc = NurbsCurve.ByPoints(cp.Translate(cn,ds*Math.Pow(ic,2)));