2011-05-31 58 views
8

我想添加与Mathematica 3D图形的交互性,除了Manipulate这很酷但有其局限性。想想Mathematica中四个立方体问题演示的四个示例,点击其中一个立方体旋转立方体。Mathematica和MouseListener - 使用Mma开发交互式图形

问题。

  1. 是否有可能赶上数学图形MouseEvents(例如使用Java类或以其他方式?)

  2. 或者是使用Java然后从Java调用数学的建议路线?或者(我不希望)正在开发交互式图形程序,而不是Mathematica应该怎么做?

回答

15

EventHandler可用于捕获各种鼠标事件(鼠标向上,鼠标向下,鼠标点击,鼠标拖动)。使用MousePosition添加一些智能。

实施例:

DynamicModule[{col1 = Green, col2 = Blue}, Graphics[ 
    { 
    EventHandler[ 
    Dynamic[{col1, Disk[]}, 
    ImageSize -> 
     Tiny], {"MouseClicked" :> (col1 = 
     col1 /. {Red -> Green, Green -> Red})}], 
    EventHandler[ 
    Dynamic[{col2, Disk[{1, 1}]}, 
    ImageSize -> 
     Tiny], {"MouseClicked" :> (col2 = 
     col2 /. {Blue -> Yellow, Yellow -> Blue})}] 
    } 
    ] 
] 

enter image description here

圆圈可以独立地点击。分别为每个对象定义一个动作。

令人惊讶的是,这甚至适用于3D图形:

DynamicModule[{col1 = Green, col2 = Blue}, 
Graphics3D[ 
    { 
    EventHandler[ 
    Dynamic[{col1, Sphere[]}, 
    ImageSize -> 
     Tiny], {"MouseClicked" :> (col1 = 
     col1 /. {Red -> Green, Green -> Red})}], 
    EventHandler[ 
    Dynamic[{col2, Sphere[{1, 1, 1}]}, 
    ImageSize -> 
     Tiny], {"MouseClicked" :> (col2 = 
     col2 /. {Blue -> Yellow, Yellow -> Blue})}] 
    } 
    ] 
] 

enter image description here

+1

惊人。谢谢。 – 2011-05-31 15:32:06

+2

@ ndroock1感谢您接受我的回答。下一次您可能再等一会以获得更多回应。 – 2011-05-31 15:49:47

+2

Sjoerd,我已经为此投了票,但我会再次投票更新。我从来没有见过,可旋转和所有。 :-) – 2011-05-31 22:51:28