Guest User

Untitled

a guest
Mar 20th, 2018
124
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.44 KB | None | 0 0
  1. scalarField = x^2 - y^2 - z;
  2. vectorField = D[scalarField, {{x, y, z}}]
  3.  
  4. v = VectorPlot3D[vectorField, {x, -2, 2}, {y, -2, 2}, {z, -2, 2},
  5. VectorPoints -> 20, VectorScale -> {0.1, Scaled[0.5]},
  6. RegionFunction -> Function[{x, y, z}, -0.1 <= scalarField <= 0.1],
  7. VectorStyle -> "Arrow3D", VectorColorFunction -> "Rainbow"]
  8.  
  9. c = ContourPlot3D[
  10. scalarField == 0, {x, -2, 2}, {y, -2, 2}, {z, -2, 2}, Mesh -> 20,
  11. MeshStyle -> Opacity[.1],
  12. ContourStyle -> Directive[Green, Opacity[0.3], Specularity[White, 30]]]
  13.  
  14. Show[v, c]
  15.  
  16. σ[u_, v_] := {(2 + Cos[v]) Cos[u], (2 + Cos[v]) Sin[u], Sin[v]}
  17. n[u_, v_] := Evaluate[Normalize[
  18. Cross[D[σ[u, v], u], D[σ[u, v], v]]
  19. ]]
  20. surfacePlot =
  21. ParametricPlot3D[σ[u, v], {u, -Pi, Pi}, {v, -Pi, Pi},
  22. PlotRangePadding -> 1];
  23. normalPlot =
  24. ParametricPlot3D[n[u, v], {u, -Pi, Pi}, {v, -Pi, Pi},
  25. PlotStyle -> Opacity[0.5]];
  26.  
  27. Manipulate[
  28. {Show[{
  29. surfacePlot,
  30. Graphics3D[{Thick, Red,
  31. Arrow[{σ @@ pt, σ @@ pt + n @@ pt}]}]
  32. }],
  33. Show[{
  34. normalPlot,
  35. Graphics3D[{Thick, Red, Arrow[{{0, 0, 0}, n @@ pt}]}]
  36. }]
  37. }
  38. ,
  39. {pt, {-Pi, -Pi}, {Pi, Pi}}]
  40.  
  41. Show[{
  42. surfacePlot,
  43. Graphics3D[
  44. Table[
  45. Arrow[{σ[u, v], σ[u, v] + n[u, v]}],
  46. {u, -Pi, Pi, 0.4}, {v, -Pi, Pi, 0.4}]
  47. ]
  48. }]
  49.  
  50. UnitNormalVector[f_, {u_, u0_}, {v_, v0_}] := Block[{f0, g0},
  51. f0 = f /. {u -> u0, v -> v0};
  52. g0 = Transpose[D[f, {{u, v}}] /. {u -> u0, v -> v0}];
  53. Arrow[{f0, f0 + Normalize[Cross @@ g0]}]]
  54.  
  55. (* Möbius strip *)
  56. mobius[u_, v_] :=
  57. {(3 + (1/2 - v) Cos[u/2]) Cos[u], (3 + (1/2 - v) Cos[u/2]) Sin[u], (1/2 - v) Sin[u/2]}
  58.  
  59. Show[ParametricPlot3D[mobius[u, v], {u, 0, 2 π}, {v, 0, 1},
  60. Mesh -> False, PlotPoints -> 55],
  61. Graphics3D[Table[UnitNormalVector[mobius[u, v], {u, u0}, {v, v0}],
  62. {u0, 0, 2 π, 2 π/20}, {v0, 0, 1, 1/5}]], PlotRange -> All]
  63.  
  64. % /. Arrow[stuff__] :> {Blue, Arrow[Tube[stuff, 0.05]]}
  65.  
  66. normalsShow[g_Graphics3D] :=
  67. Module[{pl, vl, n},
  68. {pl, vl} = First @ Cases[g,
  69. GraphicsComplex[pl_, prims_, VertexNormals -> vl_,
  70. opts___?OptionQ] :> {pl, vl}, ∞];
  71. n = Length[pl];
  72. Show[g,
  73. Graphics3D[
  74. GraphicsComplex @@ {Join[pl, pl + vl/3], {Black,
  75. Line[Table[{i, i + n}, {i, n}]]}}]]
  76. ];
  77.  
  78. c // normalsShow
  79.  
  80. surfacePlot // normalsShow
  81.  
  82. ParametricPlot3D[mobius[u, v], {u, 0, 2 π}, {v, 0, 1},
  83. Mesh -> False, PlotPoints -> 55] // normalsShow
Add Comment
Please, Sign In to add comment