2011-03-29 42 views
6

当我运行下面的代码定位熄灭图表区域

pMin = {-3, -3}; 
pMax = {3, 3}; 
range = {pMin, pMax}; 
Manipulate[ 
GraphicsGrid[ 
    { 
    {Graphics[Locator[p], PlotRange -> range]}, 
    {Graphics[Line[{{0, 0}, p}]]} 
    }, Frame -> All 
    ], 
{{p, {1, 1}}, Locator} 
] 

Mathematica graphics

我希望定位器控制是第一张图的范围内的,而是它可以移动整个GraphicsGrid区域。我的代码中有错误吗?

我也试过

{{p, {1, 1}}, pMin, pMax, Locator} 

,而不是

{{p, {1, 1}}, Locator} 

但它的行为完全错误的。

UPDATE

感谢大家,这是我最终的解决方案:

Manipulate[ 
distr1 = BinormalDistribution[p1, {1, 1}, \[Rho]1]; 
distr2 = BinormalDistribution[p2, {1, 1}, \[Rho]2]; 
Grid[ 
    { 
    {Graphics[{Locator[p1], Locator[p2]}, 
    PlotRange -> {{-5, 5}, {-5, 5}}]}, 
    {Plot3D[{PDF[distr1, {x, y}], PDF[distr2, {x, y}]}, {x, -5, 5}, {y, -5, 5}, PlotRange -> All]} 
    }], 
{{\[Rho]1, 0}, -0.9, 0.9}, {{\[Rho]2, 0}, -0.9, 0.9}, 
{{p1, {1, 1}}, Locator}, 
{{p2, {1, 1}}, Locator} 
] 

Mathematica graphics

UPDATE

现在的问题是,我不能调整大小和旋转较低的3d图。有谁知道如何解决这个问题? 我回到了两个Slider2D对象的解决方案。

+1

是否有一个原因,你不只是把行内的'LocatorPane []'?这将允许您将定位器精确地放置在具有效果的位置,即线段的末端。 – DavidC 2011-03-29 03:54:40

+0

@David Carraher这只是一个小例子。在我的笔记本中,需要两个定位器,它们将选择两对x和y坐标作为两个Binormal分布的均值,它们将显示在一个3d图上。所以这些应该是两个单独的图。 – Max 2011-03-29 10:21:21

+0

请看我更新的答案。 – 2011-03-29 15:08:11

回答

5

我不确定你想达到什么目的。我看到了一些问题,但我不知道要解决什么问题。也许你只是想要一个简单的Slider2D建设?

DynamicModule[{p = {1, 1}}, 
[email protected]{Slider2D[Dynamic[p], {{-3, -3}, {3, 3}}, 
    ImageSize -> {200, 200}], 
    Graphics[Line[{{0, 0}, Dynamic[p]}], 
    PlotRange -> {{-3, 3}, {-3, 3}}, ImageSize -> {200, 200}]}] 

这是关于3D图形旋转更新的问题的答复。

我相信大卫建议的LocatorPane是一种很好的方法来解决这个问题。我只是把一个通用的功能,因为你的例子如果您检查您会发现,GraphicsGrid返回一个图形对象InputForm不会对数学7

DynamicModule[{pt = {{-1, 3}, {1, 1}}}, 
Column[{ 
    LocatorPane[Dynamic[pt], 
    [email protected][{}, PlotRange -> {{-5, 5}, {-5, 5}}]], 
    [email protected] 
    Plot3D[{x^2 pt[[1, 1]] + y^2 pt[[1, 2]], 
      -x^2 pt[[2, 1]] - y^2 pt[[2, 1]]}, 
     {x, -5, 5}, {y, -5, 5}] 
}] 
] 
+0

我确实使用了两个Slider2D对象,但我宁愿在同一个图上有两个定位器。 – Max 2011-03-29 10:30:15

7

运行。因此,定位器确实在整个图像中移动。

GraphicsGrid[{{Graphics[Circle[]]}, {Graphics[Disk[]]}}] // InputForm 

如果你只是改变GraphicsGrid到网格,定位器将被限制在第一部分,但结果仍然看起来有点奇怪。你的PlotRange规范有点奇怪,它似乎不符合文档中心指定的任何格式。也许你想要下面的东西。

Manipulate[ 
Grid[{ 
    {Graphics[Locator[p], Axes -> True, 
    PlotRange -> {{-3, 3}, {-3, 3}}]}, 
    {Graphics[Line[{{0, 0}, p}], Axes -> True, 
    PlotRange -> {{-3, 3}, {-3, 3}}]}}, 
    Frame -> All], 
{{p, {1, 1}}, Locator}] 
+0

对于'GraphicsGrid返回一个图形对象。' – 2011-03-29 03:22:15

+0

我投了这个票,但是你不需要'Locator'在第一个'Graphics'块中;这是多余的。 – 2011-03-29 03:58:56

+0

的确,Max在范围上使用了某种矩形规格(BL,TR),而mma使用的是{xrange,yrange}规格 – 2011-03-29 08:00:24

6

LocatorPane[]做了一个很好的限制定位器的区域。

这是Wizard先生使用的方法的变体。

Column[{ LocatorPane[Dynamic[pt3], 
    [email protected][{}, ImageSize -> 150, PlotRange -> 3]], 
    [email protected][{Line[{{-1, 0}, [email protected]}]}, ImageSize -> {150, 150}, 
    PlotRange -> 3]}] 

locator confined

我会假设你想要的定位与大家分享它控制线的空间。事实上,要“附加”到该行。事实证明,这更容易实现。

Column[{LocatorPane[Dynamic[pt3],[email protected][{Line[{{-1, 0}, [email protected]}]}, 
ImageSize -> 150, PlotRange -> 3]]}] 

locator on the line

+0

+1天哪!我试图移动你的定位器在图像 – 2011-03-29 04:26:36

+0

其实我想有两张图。一个2d选择一对x和y坐标,第二个选择3d以显示具有对应于定位器坐标的平均值的两个二项分布。但你的解决方案正常工作。谢谢。 – Max 2011-03-29 10:27:18

+0

@belisarius我总是这样做。 – DavidC 2011-03-29 11:23:31

相关问题