uses Graph3D;

function ParametricTrajectory(a,b: real; N: integer; fun: real->Point3D) := PartitionPoints(a,b,N).Select(fun);

function ParametricCirve3D(a,b: real; fun: real->Point3D; N: integer := 200): SegmentsT;
begin
  var tr := ParametricTrajectory(a,b,N,fun);
  Result := Polyline3D(tr);
end;

begin
  //View3d.ShowGridLines := False;
  ParametricCirve3D(0,20*Pi,t->P3D(0.04*t*cos(t),0.04*t*sin(t),0.1*t),1000);
  //var p := ParametricCirve3D(0,20*Pi,t->P3D(3*cos(t),4*sin(1.4*t),4*cos(1.7*t)),1000);
end.