New in Wolfram Mathematica 6: Symbolic Interface Construction | ◄ previous | next ► |
Experiment with New Forms of Controls
Mathematica 6 provides an unprecedentedly flexible interface experimentation system, allowing not only traditional controls, but arbitrary graphics, layout and actions, as well as connection to arbitrary human interface devices.
In[1]:= | CircularWinder[Dynamic[\[Theta]_]] := DynamicModule[{}, Deploy[EventHandler[ Graphics[{GrayLevel[0.97], Disk[{0, 0}, 1], GrayLevel[0.5], Circle[{0, 0}, 1], GrayLevel[0.8], Circle[{0, 0}, 0.98], Black, Disk[{0, 0}, 0.01], Arrowheads[0.1], Arrow[{{0, 0}, Dynamic[{Cos[\[Theta]], Sin[\[Theta]]}]}], Darker[Cyan, 0.5], Dynamic[First[ ParametricPlot[ Evaluate[((Sign[\[Theta]] t)/50)*{Cos[t], Sin[t]}], {t, 0, \[Theta] + 0.001}]]]}, ImageSize -> 200, PlotRange -> 1.1], "MouseDragged" :> Module[{\[Alpha], dir, r = MousePosition["Graphics"], \[Beta] = ArcTan[Cos[\[Theta]], Sin[\[Theta]]] + If[Sin[\[Theta]] < 0, 2 \[Pi], 0]}, If[r == {0, 0}, r = {1, 0}]; If[! VectorQ[r, NumericQ], r = {Cos[\[Theta]], Sin[\[Theta]]}]; \[Alpha] = ArcTan @@ r + If[r[[2]] < 0, 2 \[Pi], 0]; dir = Mod[\[Alpha] - \[Beta], 2 \[Pi]]; \[Theta] += If[dir < 5, dir, -Mod[-\[Alpha] + \[Beta], 2 \[Pi]]];]]], Initialization :> If[! NumericQ[\[Theta]], \[Theta] = 0]] |
In[2]:= | DynamicModule[{a = 0, b = 0}, Column[{{CircularWinder[Dynamic[a]], CircularWinder[Dynamic[b]]}, Framed[Dynamic[{a, b, a - b, a + b}], Background -> LightYellow]}, Center]] |
Out[2]= |