【问题标题】:Plotting points in Mathematica在 Mathematica 中绘制点
【发布时间】:2011-10-27 02:20:19
【问题描述】:

我正在尝试在 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}]

(它们应该只是表面上的点)

我试图做的是使用 ListPointPlot3D 在另一个图形上手动输入点的坐标,然后使用 Show 将它们组合起来。但由于某种原因,这不起作用。有什么建议吗?

另外,我想为我绘制的点在 x 方向上添加与表面相切的小向量,但我不知道如何做到这一点,因此非常感谢您的建议!

【问题讨论】:

  • 顺便说一句,欢迎来到 StackOverflow。请记住通过单击该答案旁边的复选标记来接受最能回答您的问题的答案。一旦你有了更多的声誉,你就可以做一些事情,比如对好的答案(和问题)进行投票,并对不属于你自己的帖子发表评论。您可能也有兴趣查看 StackExchange 网络中专门的 Mathematica 用户站点的提案:area51.stackexchange.com/proposals/15787/mathematica

标签: wolfram-mathematica


【解决方案1】:

也许这会帮助您着手解决问题。它在表面上绘制 3 个随机点。您可以通过设置nPoints 来更改点数。我不知道如何沿 x 绘制切线。但是当你发现你可以使用Arrows,正如@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}]]}]]

编辑

以下动态变化利用了@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};}]

【讨论】:

    【解决方案2】:

    为了箭

    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}]]
    

    要获得任意方向的箭头 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]]]]
    

    【讨论】:

    • 很好地完成了图片。
    • 你似乎有这方面的诀窍。 +1
    【解决方案3】:

    您可以使用Graphics3D[listofpoints] 将绘图与点结合起来,其中listofpoints 是一个T*3 矩阵列表,而箭头则使用Graphics3D[Arrow[{{1, 1, -1}, {2, 2, 0}, {3, 3, -1}, {4, 4, 0}}]] 之类的结构。如果它们都是Graphics3D 对象,您应该可以将它们与Show 结合起来。

    抱歉,我现在不在 Mathematica 安装附近,无法为您提供示例。

    【讨论】:

    • 你的意思是像 Graphics3D[Point[{1, 1, 1}]] ?... 因为它仍然不允许我将它们组合起来
    • @alice314159 - 检查您评论中的代码是否独立运行。如果确实如此,但它们不会合并,那么在我安装 Mathematica 之前,我无法帮助您解决一些更深层次的错误。
    • 它确实有效,但由于某种原因我无法绘制多个点(然后我得到一个错误)。我明天再试一次。
    • @alice 我会大胆猜测,不止一点的问题是您正在使用 Graphics[Point[one], Point[two], ...] 并且需要将所有点包含在一个列表中:Graphics[{Point[one], Point[two], ...}] 或替代使用“多点”Graphics[Point[{one, two, ...}]]
    • @BrettChampion - 或者,更确切地说,Graphics3D[Point[{one, two, ...}]]
    猜你喜欢
    • 2011-09-22
    • 2011-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多