Я пытаюсь иметь две панели, слева - графические и два локатора, а справа - увеличенную версию в области, определяемой локаторами.
Я пробовал
ClearAll[mndpt];
mndpt = Compile[{{c, _Complex}, {maxiter, _Integer}},
Module[{z, iters},
iters = 0.;
z = c;
While[(iters < maxiter) && ([email protected] < 2),
iters++;
z = z^2 + c];
Sqrt[iters/maxiter]],
{{z, _Complex}},
CompilationTarget \[Rule] "C",
RuntimeOptions \[Rule] "Speed"];
и do
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],
[email protected]{x, p1[[1]], p2[[1]]}, [email protected]{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: Спецификация диапазона {x, -1,0} не имеет формы {x, xmin, xmax}.", Которую я нахожу загадочной. На самом деле я вообще озадачен. Что происходит? Какой-то вопрос? Вопрос оценки? И как я могу заставить его работать? Это, вероятно, просто, но я никогда не понимал этого внешнего вида.
EDIT: Оказывается, этот вопрос был вызван (надеюсь, мгновенным) резким увеличением глупости с моей стороны. Как отметил Саймон в комментарии, удаление двух 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: Спецификация диапазона (x, -1,0) не имеет формы {x, xmin, xmax}." было более озадачивающим, Я думаю, что это объяснил Леонид, также в комментарии (вкратце, попробуйте ClearAttributes[Dynamic, ReadProtected]
then ??Dynamic
, и вы увидите, что есть определение Dynamic/:MakeBoxes[BoxForm`x$_Dynamic,StandardForm]:=
и т.д.). Поскольку мое понимание интерфейса программирования пренебрежимо мало, я не буду пытаться объяснить это здесь, поэтому, если кто-нибудь опубликует ответ, объясняющий это, было бы полезно.