Manipulate[
a:=ab[[1]];b:=ab[[2]];
oA:={a+Cos[theta],b+Sin[theta],c,d};
oB:=oA+{delta* Sin[theta],delta* Cos[theta],0,0};
oC:=oA+{0,0,delta,0};
oD:=oA+{0,0,0,delta};
oE:=oB+oC-oA;
aD:=oD-oA;
oF:=oB+aD;oG:=oE+aD;oH:=oC+aD;
oA':=1/oA[[4]]* oA[[{1,2,3}]];
oB':=1/oB[[4]]* oB[[{1,2,3}]];
oC':=1/oC[[4]]* oC[[{1,2,3}]];
oD':=1/oD[[4]]* oD[[{1,2,3}]];
oE':=1/oE[[4]]* oE[[{1,2,3}]];oF':=1/oF[[4]]* oF[[{1,2,3}]];oG':=1/oG[[4]]* oG[[{1,2,3}]];oH':=1/oH[[4]]* oH[[{1,2,3}]];
det:=-1+(2 d*t+1-d^2)/t^2;
poly:={Point[oB'],Point[oC'],Point[oD'],Point[oE'],
Blue,Polygon[{oA',oB',oE',oC'}],
Polygon[{oD',oF',oG',oH'}],
Green,Polygon[{oA',oC',oH',oD'}],Polygon[{oB',oE',oG',oF'}],
Yellow,Polygon[{oC',oE',oG',oH'}],Polygon[{oA',oB',oF',oD'}]};

Show[
ContourPlot3D[(a x+b y+c z+d)^2-(x^2+y^2+z^2+1) (a^2+b^2+c^2+d^2-1)==0,
{x,-6,6},{y,-6,6},{z,-6,6},Mesh->None,PlotRange->All,BoxRatios->Automatic,
PerformanceGoal->"Quality",ContourStyle->Directive[Orange,Opacity[opacity]]],
Graphics3D[
{
Opacity[1.0],If[det≥0,{Red,Sphere[{a/t,b/t,c/t},Sqrt[det]]},Black,Point[{a,b,c}]],
If[show,poly,Point[{a,b,c}]](*if show*)
}
]
],

(*Controller*)
Text[Style[" projection from O onto u=1 ",Darker[Darker[Blue]],Italic,22]],Delimiter,Text[Style[" (4^dim) sphere:(x-a)^2+(y-b)^2+(z-c)^2+(u-d)^2=1",Blue,14]],
{{ab,{0,0},"a&b"},{-2,-2},{2,2}},{{c,-2},-3,3},{{d,1},1,3},{opacity,0.2,1},Delimiter,
Text[Style[" (3^dim) sphere:(x-a)^2+(y-b)^2+(z-c)^2+(t-d)^2=1",Blue,14]],
Text[Style["                    (slice of (4^dim) sphere by u=t)",Blue,12]]
,{t,1,3},Delimiter,
Text[Style[" (3^dim) tangent space at A(cosθ,sinθ,c,d)",Blue,14]],{{show,False},{True,False}},{{theta,0,"θ"},0,2Pi},{{delta,0.2,"length"},0.1,0.3},ControlPlacement->Left]