当我运行以下代码时
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}
]
我希望Locator控件在第一个Graph的范围内,但它可以在整个GraphicsGrid区域内移动。我的代码中有错误吗?
我也试过
{{p, {1, 1}}, pMin, pMax, Locator}
而不是
{{p, {1, 1}}, Locator}
但它表现完全错误。
更新
感谢大家,这是我的最终解决方案:
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}
]
更新
现在的问题是我无法调整大小并旋转下方的3d图形。有谁知道如何解决这个问题? 我回到了两个Slider2D对象的解决方案。
答案 0 :(得分:7)
如果检查InputForm,您会发现GraphicsGrid返回一个Graphics对象。因此,定位器确实在整个图像中移动。
GraphicsGrid[{{Graphics[Circle[]]}, {Graphics[Disk[]]}}] // InputForm
如果你只是将GraphicsGrid更改为Grid,定位器将被限制在第一部分,但结果仍然看起来有点奇怪。你的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}]
答案 1 :(得分:6)
LocatorPane[]
可以很好地将定位器限制在一个区域内。
这是Wizard先生使用的方法的变体。
Column[{ LocatorPane[Dynamic[pt3],
Framed@Graphics[{}, ImageSize -> 150, PlotRange -> 3]],
Framed@Graphics[{Line[{{-1, 0}, Dynamic@pt3}]}, ImageSize -> {150, 150},
PlotRange -> 3]}]
我原本假设您希望定位器与它控制的行共享空间。事实上,要“附加”到线上。事实证明这更容易实现。
Column[{LocatorPane[Dynamic[pt3],Framed@Graphics[{Line[{{-1, 0}, Dynamic@pt3}]},
ImageSize -> 150, PlotRange -> 3]]}]
答案 2 :(得分:5)
我不确定你想要实现的目标。我看到了很多问题,但我不知道该解决什么问题。也许你只想要一个简单的Slider2D
构造?
DynamicModule[{p = {1, 1}},
Column@{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是一个很好的方法来解决这个问题。我只是放入一个泛型函数,因为你的例子不能在Mathematica 7上运行。
DynamicModule[{pt = {{-1, 3}, {1, 1}}},
Column[{
LocatorPane[Dynamic[pt],
Framed@Graphics[{}, PlotRange -> {{-5, 5}, {-5, 5}}]],
Dynamic@
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}]
}]
]