2011-03-29 33 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