【发布时间】:2011-07-17 11:32:42
【问题描述】:
我试图有两个面板,左边显示一个图形和两个定位器,右边一个是定位器定义的区域中的放大版本。
我试过了
ClearAll[mndpt];
mndpt = Compile[{{c, _Complex}, {maxiter, _Integer}},
Module[{z, iters},
iters = 0.;
z = c;
While[(iters < maxiter) && (Abs@z < 2),
iters++;
z = z^2 + c];
Sqrt[iters/maxiter]],
{{z, _Complex}},
CompilationTarget \[Rule] "C",
RuntimeOptions \[Rule] "Speed"];
然后做
Manipulate[
Grid[
{{DensityPlot[mndpt[x + y*I, 200],
{x, -2, 1}, {y, -1.5, 1.5},
PlotRange \[Rule] {0, 1}, PlotPoints \[Rule] 80,
ColorFunction \[Rule] "Rainbow"],
DensityPlot[mndpt[x + y*I, 200],
Dynamic@{x, p1[[1]], p2[[1]]}, Dynamic@{y, p1[[2]], p2[[2]]},
PlotRange \[Rule] {0, 1}, PlotPoints \[Rule] 80,
ColorFunction \[Rule] "Rainbow"]}}],
{{p1, {-1, -1}}, Locator}, {{p2, {0, 1}}, Locator}]
然后右侧面板不起作用:
我的问题是,为什么会这样?如您所见,它抱怨“DensityPlot::pllim: Range specification {x,-1,0} 不是 {x, xmin, xmax} 的形式。”我觉得这很令人费解。事实上,我普遍感到困惑。到底是怎么回事?某种范围界定问题?评价问题?我怎样才能让它工作?这可能很简单,但我从来没有真正理解过这些前端的东西。
编辑:事实证明,这个问题是由于我的愚蠢程度(希望是暂时的)急剧增加造成的。正如西蒙在评论中指出的那样,删除两个Dynamics
(我为了完成这项工作而盲目地添加了它)使一切正常。也就是说,
Manipulate[
Grid[
{{DensityPlot[mndpt[x + y*I, 200],
{x, -2, 1}, {y, -1.5, 1.5},
PlotRange \[Rule] {0, 1}, PlotPoints \[Rule] 80,
ColorFunction \[Rule] "Rainbow"],
DensityPlot[mndpt[x + y*I, 200],
{x, p1[[1]], p2[[1]]},{y, p1[[2]], p2[[2]]},
PlotRange \[Rule] {0, 1}, PlotPoints \[Rule] 80,
ColorFunction \[Rule] "Rainbow"]}}],
{{p1, {-1, -1}}, Locator}, {{p2, {0, 1}}, Locator}]
做正确的事:
所以,谁知道为什么我前几次都做了,结果还是没用。
另一方面,原始案例中的消息,即“DensityPlot::pllim: Range specification {x,-1,0} is not of the form {x, xmin, xmax}。”更令人费解.我认为 Leonid 已经解释过了,也在评论中(简而言之,尝试ClearAttributes[Dynamic, ReadProtected] 然后??Dynamic 你可以看到有一个定义Dynamic/:MakeBoxes[BoxForm`x$_Dynamic,StandardForm]:= 等)。由于我对前端编程的理解可以忽略不计,因此我不会在这里解释它,所以如果有人确实发布了解释这一点的答案,将不胜感激。
【问题讨论】:
-
删除两个
Dynamics,一切正常。 -
@Simon 哇哦,谢谢!我实际上把它们放在那里是因为“它不起作用”,我开始随机添加东西直到它起作用。谁知道我做了什么...将您的评论作为答案,以便我接受。另外,如果你知道为什么
Dynamics 搞砸了,我想知道。 -
@Simon 好的,可能是因为
Dynamic具有属性HoldFirst。还是? -
@acl
Dynamic(与许多其他命令一样)通过UpValues重新定义了MakeBoxes(一旦从Dynamic中删除ReadProtected属性,您就可以看到它们)。这也会影响使用和错误消息。 -
@acl 如果 Simon 发布答案,我会很高兴,因为是他回答了这个问题。然后,要么他将我们讨论的某些部分纳入他的答案,要么我可以通过编辑他的答案来做到这一点。
标签: dynamic wolfram-mathematica frontend interactive