Different methods for computing the Nil circle
 This note book show the two differnt methods of calculating a nil circle. The first way is take a step, project on to the plane then turn. The second way is step, turn and then project onto the plane. Note that both methods give the same result .

{x1,y1,z1} = {0.0,0,0};
point = {x1, y1,z1};
pointList1 = {point};
θ = Pi/24;
u = {1,0, 0};
v = {0,1, 0};
v1 = {1,0,0};

interations= 100;
For[i=0, i < interations, i ++,
u = {1.0,0, 2*point[[2]]};
v = {0,1, -2*point[[1]]};
n = Cross[u,v];
n = n/Norm[n];
vtemp = ((v1 -(v1.n)*n)/Norm[(v1 -(v1.n)*n)])*Norm[v1];
v2 = vtemp*Cos[θ] + (Cross[n,vtemp])*Sin[θ];
newpoint = point + v2;
pointList1 = Append[pointList1, newpoint];
point = newpoint;
v1 =v2;]

 {x1,y1,z1} = {0.0,0,0};
point = {x1, y1,z1};
pointList2 = {point};
θ = Pi/24;
u = {1,0, 2*point[[2]]};
v = {0,1,-2*point[[1]]};
v1 = {1,0,0};

interations= 100;
For[i=0, i < interations, i ++,
u = {1,0, 2*point[[2]]};
v = {0,1,-2* point[[1]]};
n = Cross[u,v];
n = n/Norm[n];
vtemp = v1*Cos[θ] + (Cross[n,v1])*Sin[θ];
v2 = ((vtemp -(vtemp.n)*n)/Norm[(vtemp -(vtemp.n)*n)])*Norm[vtemp];
newpoint = point + v2;
pointList2 = Append[pointList2, newpoint];
point = newpoint;
v1 =v2;]

ListPointPlot3D[{pointList1, pointList2}]
Graphics3D[{Blue, Line[pointList1], Red, Line[pointList2]}]