在绘图期间使用定位器坐标索引矩阵

时间:2013-04-02 23:36:12

标签: dynamic graphics wolfram-mathematica interactive

我想在Mathematica中“绘制”成矩阵。也就是说,我想使用鼠标(比方说,使用EventHandler)将矩阵索引处的值更改为1,比如说0.最简单的方法似乎是使用Locator坐标,p,取圆角值这些坐标,并将该值的矩阵位置指定为1.这似乎不起作用,因为M [[Sequence @@ Round [p]]] = 1中的“Sequence @@ Round [p]”形式不起作用得到一个正确的索引,因为p本身就是一个动态数量(可以使用FullForm看到)。

做这样的事情看起来非常有用,但是我找不到对此的引用,或任何其他采用Locator坐标输出并将其用作数组索引的方法。

任何想法都非常感激。

1 个答案:

答案 0 :(得分:0)

我的经验是,定位器非常适合它们,但尝试概括它们并不能很好地发挥作用。幸运的是,你想做的事情仍然很简单。

clickFunction[point,moreargs]:=Module[{}, see below ];

DynamicModule[{},

  ClickPane[
    Dynamic[Show[ what you want to click on ]],
    clickFunction[#,moreargs]
  ]
]

当用户在窗格中单击时,将使用鼠标指针的坐标以及可能的其他参数调用clickFunction。您可以在单击函数调用中围绕各个参数放置Dynamic [](在DynamicModule的第一个参数内添加符号,使它们成为动态)。 clickFunction也可以使用表单

返回值
 ({v1,v2,v3,..}=clickFunction[#,moreargs])&

返回值列表中的符号可以是动态的,但不应该包含动态包装器。

clickFunction需要弄清楚点击了什么。对于单击窗格中的每个区域(假设它是矩形),使用其左下角和右上角创建x和y不等式,当点参数进入或离开矩形时,这些不等式返回true或false。您可以将这些保存在您使用适当功能遍历的列表中,以检测所点击的内容。

不要回避动态[]。我试图用Manipulate [](和Locators)做太长时间,认为Dynamic []是一个很大的学习曲线。不是。