Hypotrochoid

R = 10;
r = 4;
d = 10;
a = 750;
x = (R-r)*Math.Cos(0..a)+d*Math.Cos(((R-r)/r)*(0..a));
y = (R-r)*Math.Sin(0..a)-d*Math.Sin(((R-r)/r)*(0..a));
p = Point.ByCoordinates(x,y);
s = NurbsCurve.ByPoints(p);
//Hypotrochoid
R = 5;
r = 3;
d = 5;
a = 0..n..1;
x = (R-r)*Math.Cos(a)+d*Math.Cos(((R-r)/r)*a);
y = (R-r)*Math.Sin(a)-d*Math.Sin(((R-r)/r)*a);
p1 = Point.ByCoordinates(x,y);
//Graphics for animation
p2 = (Point.Origin().Translate(Vector.XAxis(),R-r))
.Rotate(Point.Origin(),Vector.ZAxis(),a);
l1 = Line.ByStartPointEndPoint(p1,p2);
c1 = Circle.ByCenterPointRadius(Point.Origin(),R);
c2 = Circle.ByCenterPointRadius(p2,r);
[p1,c1,List.LastItem(l1),List.LastItem(c2)];