Да, при помощи Manipulate у меня тоже получилось. Однако, в справке написано, что Dynamic -- это базис для Manipulate, поэтому я пытался всё делать с помощью него. Непонятно, почему мой вариант работает именно так.
Я установил, что для того, чтобы локаторы получались связаны, нужно, чтобы присутствовала функция Plot.
Например, в таком варианте
DynamicModule[{p2, ampl, shift}, p1 = {0, 1}; p2 = {1, 0}; Dynamic[ampl = p1[[2]]; shift = p1[[1]]; freq = ArcCos[p2[[2]]/ampl]/(p2[[1]] - shift); Show[Graphics[Line[{p1, p2}]], Graphics[{Locator[Dynamic[p1]], Locator[Dynamic[p2]]}], PlotRange -> {{-10, 10}, {-1, 1}}]]] Dynamic[p1]
локаторы можно двигать независимо, хотя это принципиально то же самое, а если вписать совершенно любой Plot (даже рисующий константный график), локаторы оказываются зависимы.
Кроме того, зависимость управляется наличием p1 и/или p2 в тексте программы. Так, если там присутствует только одна переменная, то второй локатор получается зависимым от первого, но не наоборот.
Казалось бы, функция Dynamic очень удобна: есть сложное выражение или программа и можно любые его подвыражения пометить Dynamic-ом, если ты хочешь, чтобы они автоматически обновлялись при появлении на экране.
Ан нет, что-то они там нахимичили...
Непонятно, столько помпы, за такую цену программу продают -- а я постоянно на баги натыкаюсь!
|