【问题标题】:Linked rotation of 3D plots3D 绘图的链接旋转
【发布时间】:2013-04-16 14:28:49
【问题描述】:

我在 Maple 14 的一行中绘制三个 3D 矢量场:

> with(plots);
> A := Array(1 .. 3):
> A[1] := fieldplot3d(...):
> A[2] := fieldplot3d(...):
> A[3] := fieldplot3d(...):
> display(A);
  Here are the three plots arranged like this: [plot1] [plot2] [plot3]

现在我可以单独旋转它们来探索向量场。 是否可以链接其他两个图,以便它们自动旋转到相同的方向?如果仅在旋转其中一个(例如最左边)时才可以这样做,那就太好了。

例如,在 MatLab 中有 linkprop 函数可以链接两个轴的属性,因此其中一个轴的更改(旋转、缩放、范围等)也将应用于另一个轴。

【问题讨论】:

    标签: plot maple


    【解决方案1】:

    我不相信这可以在当前 Maple 中使用 3D 绘图上通常的左键单击拖动或通过调整绘图菜单栏中的三个方向框(出现在 GUI 顶部,当您左键单击以将光标焦点放在任何单独的 3D 图上)。

    但是您可以在一个或多个绘图组件中设置绘图,并创建三个滑块,其基础操作代码会导致重新显示。因此,三个滑块可以控制三个方向角。这不像使用鼠标光标徒手旋转那样令人愉悦。但至少它允许多个绘图组件中的绘图(或者,在您的情况下,单个绘图组件中的数组绘图)可以一致地旋转。

    如果您不熟悉嵌入式组件编程,在 Maple 17 中设置上述内容的一种便捷方法是使用其增强的Explore 命令。

    在 Maple 17 中,您可以将其替换为调用 plots:-fieldplot 的一个简单示例,它可能是,

    A:=Array(1..3):
    A[1]:=plot3d(x^3*y,x=-10..10,y=-10..10):
    A[2]:=plot3d(sin(x)*y,x=-10..10,y=-10..10):
    A[3]:=plot3d(x*y^2,x=-10..10,y=-10..10):
    
    Explore(plots:-display(A,orientation=[theta,phi,psi]),
        parameters=[theta=-180..180,phi=-180..180,psi=-180..180]);
    

    在 Maple 16 中Explore 命令不支持上述调用,但是三个 Slider 和 Plot Component 不难钩在一起达到统一重定向和重新显示的相同效果。

    上述方法的内存效率不是很高,因为它需要从引擎到 GUI 重新创建和通信许多完整的 3D 绘图结构。这与通过在 3D 图上徒手点击拖动鼠标光标获得的旋转形成对比,后者仅涉及 GUI,并且可能只是高效的 OpenGL 重新显示。任何类型的内存泄漏,即使是每个通过的 3D 绘图的小内存泄漏(就像 Maple 16 的标准 GUI 似乎有),这种方法可能会导致标准 Java GUI 缓慢消耗内存并最终停止。

    【讨论】:

    • 不错的技巧,acer,谢谢。我不经常使用 Maple,出于某种原因,与 MatLab 相比,我总是将它视为“用于严肃数学的严肃程序”,例如,可以做更多有趣/类似编码的东西(GUI 等)。我有 Maple-14,Explore 命令无法按照您描述的方式工作,但我肯定会玩滑块(我不知道它们甚至存在于 Maple 中:)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多