Begin with a basic sine wave and incrementally alter lists of points to alter positions and profiles utilizing replication guides in Design Script (ver. 3.1)
p = Point.ByCoordinates (Math.DegreesToRadians((0..(180*8)..10)),(-10..10..#9)<1>,(Math.Sin((-90..(180*8)..10)+(0..90..10)<1>)*(-1.25..1.25..#10))<1>);
GeometryColor.ByGeometryColor(NurbsSurface.ByPoints(Point.ByCoordinates (p.X,(p.Z<-0.6 ? p.Y+(-p.Y*(p.Z)*0.08) : p.Y),p.Z)).Thicken(0.25).Translate(0,0,1.5),Color.ByARGB(255,255,250,200));
While the code required to create this geometry can be packed into a couple of lines of Design, below is a stepwise elaboration of the process.
// Sine Waver =0..360;x =Math.DegreesToRadians(r);y =0;z =Math.Sin(r);p =Point.ByCoordinates (x,y,z);