Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wolfram mathematica 圆/角滑块_Wolfram Mathematica - Fatal编程技术网

Wolfram mathematica 圆/角滑块

Wolfram mathematica 圆/角滑块,wolfram-mathematica,Wolfram Mathematica,A让我想起了不久前我试图编写的一些代码。其目的是制作一个圆形滑块[]对象,该对象可用于动态对象中类似角度的变量 我的解决方案的框架(如下)来自教程中定义的valuethumbsloider[]。主要区别在于,在valuethumbslaider[]中,滑块的值和LocatorPlane[]的位置是相同的,而在我的CircularSlider[]中,它们不是相同的-这会导致问题 第一个问题是移动滑块不会更改滑块值。这是通过使用:(x=#/Abs[Complex@@@#])和中的第二个参数修复的 这

A让我想起了不久前我试图编写的一些代码。其目的是制作一个
圆形滑块[]
对象,该对象可用于动态对象中类似角度的变量

我的解决方案的框架(如下)来自教程中定义的
valuethumbsloider[]
。主要区别在于,在
valuethumbslaider[]
中,滑块的值和
LocatorPlane[]
的位置是相同的,而在我的
CircularSlider[]
中,它们不是相同的-这会导致问题

第一个问题是移动滑块不会更改滑块值。这是通过使用:
(x=#/Abs[Complex@@@#])和
中的第二个参数修复的

这反过来会导致一个问题,即如果从外部设置滑块(
t
)的值,它将立即恢复到以前的值。这是通过保留旧值(
t0
)并与
t
进行比较来解决的。如果它们不匹配,则假定t已更改,因此
定位器
位置
x
将更新到其新位置

CircularSlider[t_] := CircularSlider[t, {0, 1}];
CircularSlider[Dynamic[t_], {min_, max_}] /; max > min := 
 With[{d = (max - min)/(2. Pi)},
  DynamicModule[{td = t/d, x, t0}, x = {Cos[td], Sin[td]};
   LocatorPane[
    Dynamic[If[!NumberQ[t], t = min; x = {Cos[td], Sin[td]}];
     If[t != t0, t0 = t; x = {Cos[td], Sin[td]}];
     t = Mod[Arg[Complex @@ x] d, max, min]; t0 = t;
     x, (x = #/Abs[Complex @@ #]) &],
    Graphics[{AbsoluteThickness[1.5], Circle[], 
      Dynamic[{Text[NumberForm[t, {3, 2}], {0, 0}]}]}],
    ImageSize -> Small]]]


所以,我的问题是:有人能把这项工作用上述的方法来解决吗?< /P> < P >至于问题1,我不认为第二个参数使用<代码>动态< /代码>作为KLUGEY——这就是第二个论点的目的。因此,我没有其他解决方案

如果在第一个参数中不将
t
赋值给
Dynamic
,则问题2可以避免

考虑到这一点,下面是另一个实现:

CircularSlider2[Dynamic[t_], r:{min_, max_}:{0, 1}] :=
  DynamicModule[{scale, toXY, fromXY},
      scale = (max - min) / (2. Pi);
      toXY[a_?NumberQ] := Through@{Cos, Sin}[a / scale];
      toXY[a_] := {1, 0};
      fromXY[{x_, y_}] := Mod[Arg[x + I y] scale, max, min];
      LocatorPane[
        Dynamic[toXY[t], (t = fromXY[#])&],
        Graphics[{
            AbsoluteThickness[1.5], Circle[],
            Dynamic[{Text[NumberForm[t, {3,2}], {0, 0}]}]
          }],
        ImageSize -> Small
      ]
  ]
此版本与原始版本之间唯一的实质性区别在于
Dynamic
的第一个参数是一个没有副作用的表达式


编辑 我刚刚在Mathematica 8中偶然发现了这个未记录的实验特性:

DynamicModule[{x = RandomReal[{0, 50}]},
  {Experimental`AngularSlider[Dynamic@x], Dynamic@x}
]

我喜欢!我在代码中注意到的另一个问题是,滑块不能有两个链接副本。我喜欢
showinding->True
选项,这是一个非常好的主意。