是否可以更改Manipulate
中变量的值?假设我有Manipulate
个变量x
和y
,我们会显示这些值。我想要做的是以这样的方式制作:当我更改x
的值时,y
会更新为x
* x
。当我更改y
的值时,x
会更新为y
的平方根。
另一个问题是,我可以在Manipulate
中设置多个面板吗?我想在每个滑块下面都有一个白色面板。
Manipulate[
Row[{x, y}, " "],
Row[{
Control[{{x, 0, Style["x", "TI", 14]}, 0, 4 , Appearance -> "Labeled"}],
Control[{{y, 0, Style["y", "TI", 14]}, 0, 16, Appearance -> "Labeled"}]
}]
]
在上面的情节中,我将x
设为3,将y
设为9.再次,我想将y
移至4并让x
移动到2
。同样,我想将x
移至4并将y
移至16。
有可能吗?或者我刚遇到鸡肉或鸡蛋问题?
答案 0 :(得分:5)
有点黑客但是要把滑块耦合并得到两个面板,你也可以做这样的事情
Panel[DynamicModule[{x, y, width = 250},
Grid[{{
Labeled[Slider[Dynamic[x, (x = #; y = #^2) &], {0, 5}],
{Style["x", "TI", 14], Dynamic[x]}, {Left, Right}],
Labeled[Slider[Dynamic[y, (y = #; x = Sqrt[#]) &], {0, 25}],
{Style["y", "TI", 14], Dynamic[y]}, {Left, Right}]},
Framed[Pane[#, width, Alignment -> Center], FrameMargins -> 10,
Background -> White, FrameStyle -> {Gray}] & /@
{Row[{"x=", Dynamic[x]}], Row[{"y=", Dynamic[y]}]}}, Alignment -> Left]]]
<强>截图:强>
答案 1 :(得分:3)
怎么样
DynamicModule[{x = 0},
{Slider[Dynamic[x], {0, 1}],
Slider[Dynamic[x^2, (x = Sqrt@#) &], {0, 1}]}]
这是我在docs的tutorial/IntroductionToDynamic
中找到的代码段的一个简单修改?
编辑:您可以按如下方式添加面板等:
DynamicModule[{x = 0},
Row[{Column[{Slider[Dynamic[x], {0, 1}], Panel@Dynamic@x}],
Column[{Slider[Dynamic[x^2, (x = Sqrt@#) &], {0, 1}],
Panel@Dynamic@Sqrt[x]}]}]]
答案 2 :(得分:2)
将每个问题分开可能会更好。很难在同一个地方回答2个问题。
对于第一个问题,您可以使用自己的Dynamics来获得更好的控制。这是一种方式:
Manipulate[
Row[{
Dynamic[Refresh[Text@Row[{"x=",x," y=",y}],TrackedSymbols->{event}]],
Dynamic[Refresh[event=Date[];y=x*x;"",TrackedSymbols->{x}]],
Dynamic[Refresh[event=Date[];x=Sqrt[y];"",TrackedSymbols->{y}]]
}],
{{x,2,"x"},0,100,1},
{{y,2,"y"},0,1000,1},
{{event,0},ControlType->None},
TrackedSymbols:>{None}
]
对于你的第二个问题,一个Manipulate,有一个'panel',输出到达。所以,你不能用一个Manipulate真正做到这一点。但是你可以嵌套Manipulates,所以你可以通过在一个Manipulate下使用自己的控件进行每个操作来实现这一点。
要在2个内部Manipulate之间共享变量,所以当一个Manipulate更新自己的变量时,另一个Manipulate会看到最新的更新,这是一种可能的方法。当您移动一个Manipulate滑块时,第二个Manipulate会自动使用新值更新。
Manipulate[
Grid[{{
Manipulate[( gx=x; Row[{"x=",x," y=",gy}]),
{{x,1,"x="},0,10,1}],
Manipulate[( gy=y; Row[{"x=",gx," y=",y}]),
{{y,1,"y="},0,10,1}]
}}],
{{gx,0},ControlType->None},
{{gy,0},ControlType->None},
ControlPlacement->Bottom
]