Reply to the comment
It means that we need to set f[s]:=-s
?
R = 8;
r[s_] := R {Cos[s], Sin[s], 0};
n[s_] := -r[s] // Normalize;
t[s_] := r'[s] // Normalize;
b[s_] := Cross[t[s], n[s]] // Normalize;
circle3 =
ParametricPlot3D[r[s], {s, 0, 2 π},
PlotStyle -> {Opacity[.5], Green}];
d = 1;
f[s_] := -s;
Show[{circle3,
Table[Graphics3D[{Arrowheads[.01], Arrow[{r[s], r[s] + d*t[s]}],
Arrow[{r[s], r[s] + d*b[s]}], Red,
Arrow[{r[s] - d*(Cos[θ]*t[s] + Sin[θ]*b[s]),
r[s] + d*(Cos[θ]*t[s] +
Sin[θ]*b[s])} /. θ -> f[s]]}], {s, 0,
2 π, 2 π/36}]}, ViewProjection -> "Orthographic",
Boxed -> False, Axes -> False, PlotRange -> R + 1,
ImageSize -> Large, ViewPoint -> {0.60, -2.90, 1.62}]
Updated
Here we use Frenet-Serret frame $\{r(s): t(s),n(s),b(s)\}$ and set a rotation speed function f[s]
so we can adjust such function to get another result.
R = 8;
r[s_] := R {Cos[s], Sin[s], 0};
n[s_] := -r[s] // Normalize;
t[s_] := r'[s] // Normalize;
b[s_] := Cross[t[s], n[s]] // Normalize;
circle3 =
ParametricPlot3D[r[s], {s, 0, 2 π}, PlotStyle -> Green];
d = 2;
f[s_] := s + π/2;
Show[{circle3,
Table[Graphics3D[{Arrowheads[.02], Red,
Arrow[{r[s] - d*(Cos[θ]*t[s] + Sin[θ]*b[s]),
r[s] + d*(Cos[θ]*t[s] +
Sin[θ]*b[s])} /. θ -> f[s]]}], {s, 0,
2 π, 2 π/36}]}, ViewProjection -> "Orthographic",
Boxed -> False, Axes -> True, PlotRange -> R + 1]
Original
We can rotate a line around the z-axis {0,0,1}
with angle λ (2 π)/n
where 0<λ<1
( such line through the point {1,0,0}
with direction dir
)
n = 36;
λ = 0.8;
sol = NMaximize[{0,
VectorAngle[
RotationTransform[((2 π)/n)*1, {0, 0, 1}][{x, y, z}],
RotationTransform[((2 π)/n)*2, {0, 0, 1}][{x, y,
z}]] == λ (2 π)/n, x^2 + y^2 + z^2 == 1, z > 0,
y > 0}, {x, y, z}];
dir = {x, y, z} /. sol[[2]];
circle3 =
ParametricPlot3D[{Cos[t], Sin[t], 0}, {t, 0, 2 π},
PlotStyle -> Green];
Show[Graphics3D[{Arrowheads[0.02],
Table[GeometricTransformation[{{Red, PointSize[Large],
Point[{1, 0, 0}]},
Arrow[{{1, 0, 0} - .3 dir, {1, 0, 0} + .3 dir}]},
RotationTransform[((2 π)/n)*k, {0, 0, 1}]], {k, n}]},
BoxRatios -> Automatic], circle3, Boxed -> False, Axes -> False,
ViewPoint -> {-1.39, -2.93, 0.97}]