Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- w = 7;
- grid = w/4;
- r = 1;
- proj[p_, \[Alpha]_, \[Beta]_] := (
- {{Cos[\[Beta]], -Sin[\[Beta]], 0}, {Cos[\[Alpha]] Sin[\[Beta]],
- Cos[\[Alpha]] Cos[\[Beta]], -Sin[\[Alpha]]}, {Sin[\[Alpha]] \
- Sin[\[Beta]], Cos[\[Beta]] Sin[\[Alpha]], Cos[\[Alpha]]}}.p
- )[[{1, 3}]];
- \[Alpha]Iso = 0.6154797086703875`;
- c1 = RGBColor[0.25, 0.68, 0.78];
- c2 = RGBColor[0.72, 0.37, 0.3];
- smoothstep[t_] :=
- If[t < 0, 0, If[t > 1, 1, 6 t^5 - 15 t^4 + 10 t^3]];
- Clear[\[Alpha], \[Beta]];
- \[Alpha][t_] := (
- smoothstep[t - 1] \[Alpha]Iso
- + (Pi/2 - \[Alpha]Iso) smoothstep[t - 6.7]
- );
- \[Beta][t_] := (
- Pi/4 (1 - smoothstep[t - 6.7])
- );
- Clear[p];
- tmax = 5;
- p[t_] := If[
- t < 2,
- (
- ({1, -1, 0}/Sqrt[2]) Cos[-Pi Min[t, 1.61]/2 + 1.2] (1 -
- smoothstep[2 (t - 1.5)])
- + smoothstep[2 (t - 1.5)] {0, -0.9, 0}
- ),
- {-0.9 Sqrt[1 - (2 (tt - 3)/tmax - 0.5)^2] Sin[3.5 Pi (tt - 2)],
- -0.9 + 1.8 (tt - 2)/tmax, 0} /. {tt -> Min[t, 6.7]}
- ];
- p2[t_] :=
- With[{xy = p[t][[;; 2]]}, Join[xy, {Sqrt[1 - Norm[xy]^2]}]];
- p3[t_] := With[{pp = p[t]}, Normalize[pp]/Norm[pp]];
- frame[t_] := (
- Show[
- Graphics[{
- White,
- {
- GrayLevel[0.6],
- Table[
- Line[{proj[{-w, i, 0}, \[Alpha][t], \[Beta][t]],
- proj[{w, i, 0}, \[Alpha][t], \[Beta][t]]}],
- {i, -w, w, grid}
- ],
- Table[
- Line[{proj[{i, -w, 0}, \[Alpha][t], \[Beta][t]],
- proj[{i, w, 0}, \[Alpha][t], \[Beta][t]]}],
- {i, -w, w, grid}
- ]
- },
- {EdgeForm[White], FaceForm[],
- Polygon[Map[proj[Join[#, {0}], \[Alpha][t], \[Beta][t]] &,
- CirclePoints[{0, 0}, 1, 100]]]},
- Line[
- Map[proj[
- RotationMatrix[Pi/4, {0, 0, 1}].Join[{0}, #], \[Alpha][
- t], \[Beta][t]] &,
- Select[CirclePoints[{0, 0}, 1, 100], Last[#] >= 0 &]]],
- If[t > 1,
- {
- Opacity[Clip[2 (t - 1), {0, 0.6}]],
- Table[
- Line[
- Map[proj[
- RotationMatrix[\[Theta], {0, 0,
- 1}].Join[{0}, #], \[Alpha][t], \[Beta][t]] &,
- Select[CirclePoints[{0, 0}, 1, 100], Last[#] >= 0 &]]],
- {\[Theta], 0, Pi, Pi/8}
- ],
- Table[
- Line[
- Map[proj[Join[#, {z}], \[Alpha][t], \[Beta][t]] &,
- CirclePoints[{0, 0}, Sqrt[1 - z^2], 100]]],
- {z, 0, 1, 1/4}
- ]
- },
- {}
- ],
- {
- Thickness[0.004],
- Line[{
- proj[p[t], \[Alpha][t], \[Beta][t]],
- proj[p2[t], \[Alpha][t], \[Beta][t]],
- proj[p3[t], \[Alpha][t], \[Beta][t]]
- }]
- },
- {
- {Lighter@c1, PointSize[0.02],
- Point[proj[p[t], \[Alpha][t], \[Beta][t]]]},
- (*{PointSize[Medium],Point[proj[p2[t],\[Alpha][
- t],\[Beta]]]},*)
- {Lighter@c2, PointSize[0.02],
- Point[proj[p3[t], \[Alpha][t], \[Beta][t]]]}
- }
- }, ImageSize -> 500, PlotRange -> 4.3],
- If[t > 2.001,
- ParametricPlot[
- {proj[p[tt], \[Alpha][t], \[Beta][t]],
- proj[p3[tt], \[Alpha][t], \[Beta][t]]},
- {tt, 2, Min[t, 6.7]}, PlotStyle -> {c1, c2}
- ],
- {}
- ]
- , Background -> Black]
- );
- Manipulate[
- frame[t],
- {t, 0, 7.7}
- ]
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement