Показывать или скрывать компоненты с помощью Manipulate в Mathematica

#graphics #controller #wolfram-mathematica

#графика #контроллер #вольфрам-mathematica #wolfram-mathematica

Вопрос:

Как я мог бы настроить контроллер на отображение или скрытие графического компонента манипуляции?

 Manipulate[Graphics[
{Pink, Disk[{1, 1}, r],
Green, Disk[{2, 2}, r]}],
{{r, 0.5, Style["Radius", Black, 16]}, 0.5, 5, 1, 
Appearance -> "Labeled"}]
  

Например, в приведенном выше примере, как я мог бы настроить контроллер на отображение или нет Зеленого круга?

введите описание изображения здесь

— Решение :

 Manipulate[Graphics[{
   If[thePink,
   {Pink, Disk[{1, 1}, r]}],
   If[theGreen,
   {Green, Disk[{2, 2}, r]}]
   }
   ],
   {{r, 0.5, Style["Radius", Black, 16]}, 0.5, 5, 1, 
   Appearance -> "Labeled"},
   {{thePink, True, "Pink"}, {True, False}},
   {{theGreen, False, "Green"}, {True, False}}]
  

введите описание изображения здесь

Ответ №1:

На самом деле вы не можете «скрыть» зеленый шар.

То, что отображается, является результатом вычисления выражения Manipulate. Manipulate работает следующим образом:

Манипулировать [ выражением, control_variables]

При изменении любой управляющей переменной (динамически) выражение пересматривается и отображаются его результаты. Итак, когда вы перемещаете ползунок, вы изменяете значение переменной, и, следовательно, выражение повторно вычисляется и отображаются его выходные данные.

Чтобы «скрыть» что-либо, вам нужно изменить выражение, чтобы НЕ выводить зеленый шар. Итак, вам нужно добавить некоторую управляющую переменную (скажем, checkbox) и, если установлено, затем изменить выражение, чтобы не показывать зеленый шар. Подойдет простой логический тест. Например

 Manipulate[
 Graphics[{Pink, Disk[{1, 1}, r], Green, If[show, Disk[{2, 2}, r]], 
   Sequence[]}], {{r, 0.5, "Radius"}, 0.5, 
  5}, {{show, True, "Show Green Circle?"}, {True, False}}]
  

Редактировать:

Вау, спасибо, Саймон, я собирался вставить пример выполнения именно того, что вы сделали, когда увидел вашу правку. Спасибо. Это почти тот же код, что и у вас. Здесь это также может быть вставлено 🙂

 Manipulate[Graphics[
{ Pink,Disk[{1,1},r],
  If[on,{Green,Disk[{2,2},r]}]
}] ,

{{r,0.5,"Radius"},0.5,5},
{{on,False,"show green ball"},{True,False}}

]
  

Комментарии:

1. Ах, кажется, мы все поняли это одновременно! En Francais : «Les grands esprits se rencontrent» 😉

2. Не проблема. Я не был уверен, вернетесь ли вы, чтобы отредактировать свой ответ, и поскольку у меня был готовый код для работы…

Ответ №2:

Возможно:

 Manipulate[
 Graphics[{Pink, Disk[{1, 1}, r], Opacity[o], 
          Green, Disk[{2, 2}, r]}], 
{{r, 0.5, "Radius"}, 0.5, 5}, 
{{o, 0.5, "Opacity"}, 0, 1}]
  

Комментарии:

1. Зная ваши навыки из ваших обычных ответов, я, должно быть, неправильно сформулировал вопрос!

2. @500 Я не понял, вы хотите, чтобы ваш круг исчез «одним щелчком мыши» 🙂

3. и вот почему этот форум для меня является отличным обучением точности 😉