Advertisement
Guest User

circle inversion

a guest
Apr 4th, 2020
797
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.24 KB | None | 0 0
  1. w = 7;
  2. grid = w/4;
  3. r = 1;
  4. proj[p_, \[Alpha]_, \[Beta]_] := (
  5. {{Cos[\[Beta]], -Sin[\[Beta]], 0}, {Cos[\[Alpha]] Sin[\[Beta]],
  6. Cos[\[Alpha]] Cos[\[Beta]], -Sin[\[Alpha]]}, {Sin[\[Alpha]] \
  7. Sin[\[Beta]], Cos[\[Beta]] Sin[\[Alpha]], Cos[\[Alpha]]}}.p
  8. )[[{1, 3}]];
  9. \[Alpha]Iso = 0.6154797086703875`;
  10. c1 = RGBColor[0.25, 0.68, 0.78];
  11. c2 = RGBColor[0.72, 0.37, 0.3];
  12. smoothstep[t_] :=
  13. If[t < 0, 0, If[t > 1, 1, 6 t^5 - 15 t^4 + 10 t^3]];
  14. Clear[\[Alpha], \[Beta]];
  15. \[Alpha][t_] := (
  16.  
  17. smoothstep[t - 1] \[Alpha]Iso
  18. + (Pi/2 - \[Alpha]Iso) smoothstep[t - 6.7]
  19. );
  20. \[Beta][t_] := (
  21. Pi/4 (1 - smoothstep[t - 6.7])
  22. );
  23. Clear[p];
  24. tmax = 5;
  25.  
  26. p[t_] := If[
  27. t < 2,
  28. (
  29. ({1, -1, 0}/Sqrt[2]) Cos[-Pi Min[t, 1.61]/2 + 1.2] (1 -
  30. smoothstep[2 (t - 1.5)])
  31. + smoothstep[2 (t - 1.5)] {0, -0.9, 0}
  32. ),
  33. {-0.9 Sqrt[1 - (2 (tt - 3)/tmax - 0.5)^2] Sin[3.5 Pi (tt - 2)],
  34. -0.9 + 1.8 (tt - 2)/tmax, 0} /. {tt -> Min[t, 6.7]}
  35. ];
  36.  
  37. p2[t_] :=
  38. With[{xy = p[t][[;; 2]]}, Join[xy, {Sqrt[1 - Norm[xy]^2]}]];
  39. p3[t_] := With[{pp = p[t]}, Normalize[pp]/Norm[pp]];
  40. frame[t_] := (
  41. Show[
  42. Graphics[{
  43. White,
  44. {
  45. GrayLevel[0.6],
  46. Table[
  47. Line[{proj[{-w, i, 0}, \[Alpha][t], \[Beta][t]],
  48. proj[{w, i, 0}, \[Alpha][t], \[Beta][t]]}],
  49. {i, -w, w, grid}
  50. ],
  51. Table[
  52. Line[{proj[{i, -w, 0}, \[Alpha][t], \[Beta][t]],
  53. proj[{i, w, 0}, \[Alpha][t], \[Beta][t]]}],
  54. {i, -w, w, grid}
  55. ]
  56. },
  57. {EdgeForm[White], FaceForm[],
  58. Polygon[Map[proj[Join[#, {0}], \[Alpha][t], \[Beta][t]] &,
  59. CirclePoints[{0, 0}, 1, 100]]]},
  60. Line[
  61. Map[proj[
  62. RotationMatrix[Pi/4, {0, 0, 1}].Join[{0}, #], \[Alpha][
  63. t], \[Beta][t]] &,
  64. Select[CirclePoints[{0, 0}, 1, 100], Last[#] >= 0 &]]],
  65. If[t > 1,
  66. {
  67. Opacity[Clip[2 (t - 1), {0, 0.6}]],
  68. Table[
  69. Line[
  70. Map[proj[
  71. RotationMatrix[\[Theta], {0, 0,
  72. 1}].Join[{0}, #], \[Alpha][t], \[Beta][t]] &,
  73. Select[CirclePoints[{0, 0}, 1, 100], Last[#] >= 0 &]]],
  74. {\[Theta], 0, Pi, Pi/8}
  75. ],
  76. Table[
  77. Line[
  78. Map[proj[Join[#, {z}], \[Alpha][t], \[Beta][t]] &,
  79. CirclePoints[{0, 0}, Sqrt[1 - z^2], 100]]],
  80. {z, 0, 1, 1/4}
  81. ]
  82. },
  83. {}
  84. ],
  85. {
  86. Thickness[0.004],
  87. Line[{
  88. proj[p[t], \[Alpha][t], \[Beta][t]],
  89. proj[p2[t], \[Alpha][t], \[Beta][t]],
  90. proj[p3[t], \[Alpha][t], \[Beta][t]]
  91. }]
  92. },
  93. {
  94. {Lighter@c1, PointSize[0.02],
  95. Point[proj[p[t], \[Alpha][t], \[Beta][t]]]},
  96. (*{PointSize[Medium],Point[proj[p2[t],\[Alpha][
  97. t],\[Beta]]]},*)
  98. {Lighter@c2, PointSize[0.02],
  99. Point[proj[p3[t], \[Alpha][t], \[Beta][t]]]}
  100. }
  101. }, ImageSize -> 500, PlotRange -> 4.3],
  102. If[t > 2.001,
  103. ParametricPlot[
  104. {proj[p[tt], \[Alpha][t], \[Beta][t]],
  105. proj[p3[tt], \[Alpha][t], \[Beta][t]]},
  106. {tt, 2, Min[t, 6.7]}, PlotStyle -> {c1, c2}
  107. ],
  108. {}
  109. ]
  110. , Background -> Black]
  111. );
  112. Manipulate[
  113. frame[t],
  114. {t, 0, 7.7}
  115. ]
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement