0

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

做这样的事情似乎非常有用,但我找不到对此的引用,或者任何其他采用定位器坐标输出并将其用作数组索引的方法。

任何想法都非常感谢。

4

1 回答 1

0

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

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

DynamicModule[{},

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

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

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

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

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

不要回避 Dynamic[]。我试图用 Manipulate[] (和定位器)做事情太久了,认为 Dynamic[] 是一个很大的学习曲线。它不是。

于 2013-04-03T17:36:04.470 回答