2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Mathematica: почему движутся оба локатора?
Сообщение03.01.2011, 18:32 
Заслуженный участник
Аватара пользователя


16/03/06
406
Moscow
Хочу провести синусоиду через две точки, заданные локаторам. В формуле, может, напутал, но всё равно непонятно, почему если хватаешь за один локатор, движутся оба?

Код:
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[
   Plot[ampl*Cos[(x - shift)*freq], {x, -10, 10}],
   Graphics[{
     Locator[Dynamic[p1]],
     Locator[Dynamic[p2]]
     }],
   PlotRange -> {{-10, 10}, {-1, 1}}
   ]
  ]
]
Dynamic[p1]

 Профиль  
                  
 
 Re: Mathematica: почему движутся оба локатора?
Сообщение04.01.2011, 21:55 
Заслуженный участник
Аватара пользователя


16/03/06
406
Moscow
Хоть объясните: считаете ли вы это багом или я неправильно понимаю работу Dynamic?

 Профиль  
                  
 
 Re: Mathematica: почему движутся оба локатора?
Сообщение04.01.2011, 23:27 
Заслуженный участник


27/04/09
28128
Увы, боюсь, не у всех Mathematica такая новая. У меня пятая. :) А что говорит справка?

 Профиль  
                  
 
 Re: Mathematica: почему движутся оба локатора?
Сообщение05.01.2011, 00:27 


07/03/10
59
В таком виде у меня тоже не работает. Но я динамические переменные программирую несколько в ином стиле, и вот какой рабочий вариант получился у меня:
Код:
Manipulate[Module[{ampl, shift, freq},
  ampl = p1[[2]];
  shift = p1[[1]];
  freq = ArcCos[p2[[2]]/ampl]/(p2[[1]] - shift);
  Plot[ampl*Cos[(x - shift)*freq], {x, -10, 10},
   PlotRange -> {{-10, 10}, {-1, 1}}]
  ], {{p1, {0, 1}}, Locator}, {{p2, {1, 0}}, Locator}
]

Использую версию 7.0.2

 Профиль  
                  
 
 Re: Mathematica: почему движутся оба локатора?
Сообщение05.01.2011, 00:55 
Заслуженный участник
Аватара пользователя


16/03/06
406
Moscow
Да, при помощи 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-ом, если ты хочешь, чтобы они автоматически обновлялись при появлении на экране.

Ан нет, что-то они там нахимичили...

Непонятно, столько помпы, за такую цену программу продают -- а я постоянно на баги натыкаюсь!

 Профиль  
                  
 
 Re: Mathematica: почему движутся оба локатора?
Сообщение05.01.2011, 15:20 
Заслуженный участник


27/04/09
28128
Dims в сообщении #395400 писал(а):
а я постоянно на баги натыкаюсь!
В пятой не было. :-)
Я бы покопался в справке по этим функциям на их сайте, но, боюсь, одной справкой без приложения к опыту не пойму.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 6 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group