Построение точек в Mathematica - PullRequest
10 голосов
/ 27 октября 2011

Я пытаюсь нанести несколько точек на следующую картинку в Mathematica:

ParametricPlot3D[
   {{u, v, (Cos[u] + Cos[v])/3}, {u, -1, (Cos[u] + Cos[0])/3}, 
   {5, v, (Cos[4] + Cos[v])/3}}, {u, -4, 4}, {v, 0, 8}, Axes -> False, 
 Boxed -> False, BoxRatios -> {8, 8, 1.5}]

Mathematica graphics

(они должны просто выглядеть как точки на поверхности)

То, что я пытался сделать, это ввести координаты точек на другом графике вручную, используя ListPointPlot3D, а затем объединить их, используя Show.Но по какой-то причине это не работает.Предложения?

Кроме того, я хотел бы добавить небольшие векторы, касательные к поверхности, в направлениях x для точек, которые я нанес на графике, но я понятия не имею, как это сделать, поэтому предложения будут очень признательны!

Ответы [ 3 ]

8 голосов
/ 27 октября 2011

Возможно, это поможет вам начать работу над решением.Он отображает 3 случайные точки на поверхности.Вы можете изменить количество точек, установив nPoints.Я не знаю, как построить касательные вдоль х.Но когда вы это поймете, вы можете использовать Arrow s, как подсказывает @ Verbeia.

nPoints = 3;
Show[ParametricPlot3D[{
       {u, v, (Cos[u] + Cos[v])/3}, 
       {u, -1, (Cos[u] + Cos[0])/3}, {5,  v, (Cos[4] + Cos[v])/3}}, 
       {u, -4, 4}, {v, 0, 8}, Axes -> False, 
       Boxed -> False, BoxRatios -> {8, 8, 1.5},
       PlotStyle -> Directive[Opacity[0.5]]],

     Graphics3D[{Red, PointSize[.025], 
         Point[Table[{u1 = RandomReal[{-3, 3}], v1 = RandomReal[{1, 7}], 
         (Cos[u1] + Cos[v1])/3}, {nPoints}]]}]]

points on surface

Edit

Следующая динамическая вариацияиспользование вклада @belisarius:

Manipulate[
Show[ParametricPlot3D[{{u, v, (Cos[u] + Cos[v])/3} },
  {u, -4, 4}, {v, 0, 8}, Axes -> False, Boxed -> False, 
  BoxRatios -> {8, 8, 1.5},
  Mesh -> None,
  ImageSize -> {400, 300},
  PlotRange -> {{-4, 4}, {0, 8}},
  PlotRangePadding -> {{0, 1.4}, {0, 0}},
  PlotStyle -> Directive[Opacity[0.5]]],
Graphics3D[({Red, PointSize[.025], 
  Point@f[pt[[1, 1]], pt[[1, 2]]], Black, 
  Arrow[{f[pt[[1, 1]], pt[[1, 2]]], 
  f[pt[[1, 1]], pt[[1, 2]]] + D[f[t, pt[[1, 2]]], t] /. 
   t -> pt[[1, 1]]}]}]],
Grid[{{
  LocatorPane[Dynamic[pt],
  Dynamic[Graphics[{},
   PlotRange -> {{-4, 4}, {0, 8}},
   Frame -> True,
   ImageSize -> 160,
   FrameTicks -> {Range[-4, 4], Range[0, 8], None, None},
   FrameLabel -> {"u", "v"},
   GridLines -> {Range[-4, 4], Range[0, 8]},
   GridLinesStyle -> Directive[LightGray]]],
   {{-4, 0}, {4, 8}}]}}],
  {{pt, {{1, 2}}}, ControlType -> None},

  Initialization :> {f[u_, v_] := {u, v, (Cos[u] + Cos[v])/3};}]

Manipulate

5 голосов
/ 27 октября 2011

Для стрелок

f[u_, v_] := {u, v, (Cos[u] + Cos[v])/3};
Show[ParametricPlot3D[{f[u, v]}, {u, -4, 4}, {v, 0, 8},
         Axes -> False,  Mesh -> None, Boxed -> False, BoxRatios -> {8, 8, 1.5}, 
         PlotStyle -> Directive[Opacity[0.5]]], 
 Graphics3D@
  Table[{Red, PointSize[.025], Point@f[u, v], 
         Black, Arrow[{f[u, v], f[u, v] + D[f[t, v], t] /. t -> u}]}, 
  {u, -4, 4, 2}, {v, 0, 8, 2}]]

enter image description here

Чтобы получить стрелки в любом направлении a = {a1, a2} вместо x, вы можете сделать:

Dot[{a1,a2}.#] & /@ D[f[u, v], {{u, v}}]
(*
-> {a1, a2, -(1/3) a1 Sin[u] - 1/3 a2 Sin[v]}
*)

Редактировать

И производные, и нормальные:

f[u_, v_] := {u, v, (Cos[u] + Cos[v])/3};
Show[
 Graphics3D@
  Table[{Red, PointSize[.025], Point@f[u, v], Black, Arrowheads[.02], 
    Arrow[{f[u, v], f[u, v] + D[f[t, v], t] /. t -> u}], 
    Arrow[{f[u, v], f[u, v] + D[f[u, t], t] /. t -> v}],
    Arrow[{f[u, v],  f[u, v] +
                     Cross[D[f[t, v], t] /. t -> u, 
                           D[f[u, t], t] /. t -> v]}]}, 
  {u, -4, 4, 2}, {v, 0, 8, 2}], 

 ParametricPlot3D[{f[u, v]}, {u, -4, 4}, {v, 0, 8}, 
     Axes -> False, Mesh -> 3, MeshStyle -> {{Opacity[0.1], LightBlue}}, 
     Boxed -> False, BoxRatios -> {8, 8, 1.5}, 
     PlotStyle -> Directive[Opacity[0.5]]]]

enter image description here

1 голос
/ 27 октября 2011

Вы можете объединить график с точками, используя Graphics3D[listofpoints], где listofpoints - список матрицы T * 3, а стрелки - с использованием конструкций, подобных Graphics3D[Arrow[{{1, 1, -1}, {2, 2, 0}, {3, 3, -1}, {4, 4, 0}}]]. Если все они являются Graphics3D объектами, вы сможете комбинировать их с Show.

Извините, я не нахожусь рядом с установкой Mathematica, чтобы представить вам пример.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...