如何在约束条件下以图形方式在Mathematica中定义参数值

Mat*_*eoS 15 wolfram-mathematica interactive

我在Mathematica(和StackOverflow)中相对较新,我试图弄清楚是否可以实现以下Mathematica接口.

我想在Mathematica中创建一个接口,用户可以根据约束以图形方式和交互方式定义任意数量的数值参数.

问题中的参数是数字权重[0,1],每个都与相应的标准相关联并且被约束为求和.显而易见,这种约束导致了对可以与每个标准相关联的权重的权衡,并且我希望通过沿着下面的线(不幸地在Excel中制作)的交互式绘图以图形方式进行这种权衡:

图形权重定义的示例

在这个例子中,有6个标准,但我想将其概括为任意数字(例如,在2和7之间).

界面将通过沿着相应的轴拖动每个多边形顶点(对应于特定的权重)并且使其他顶点均匀地调整以使它们总是总和为1来工作.

然后返回数值以用于后续计算.

我环顾四周,似乎找不到有同样问题的人(可能是搜索查询的定义非常重要).

我在Mathematica的例子中发现的最接近的事情是定位器窗格的以下应用,其中允许在正方形上移动3个点并返回它们的位置:

[0,1]

在此输入图像描述

我非常感谢任何建议.谢谢!

Dr.*_*ius 13

也许是这样的:

n = 6;
posText[x_List] := Text[Round[Norm@#/Total@(Norm /@ x), .01], 1.3 #, 
                        Background -> LightRed] & /@ x;
rot = RotationMatrix[Pi/15];
DynamicModule[{
  pt = pti = {Re@#, Im@#} &@(E^(2 I Pi #/n)) & /@ Range@n,
  r  = Array[1 &, n]},
 Column@{LocatorPane[
    Dynamic[pt],
    Framed@Graphics[
      {(*The Arrows*)
       Black, Arrow[{{0, 0}, 1.2 #}] & /@ pt,

       (*The Criteria Numbers*)
       MapIndexed[{Text[Style[#2[[1]],20], #1],Circle[#1,.1]}&, 1.1 rot.#&/@pti],

       (*The Cyan Polygons*)
       FaceForm[None], EdgeForm[Cyan], Polygon[pt #] & /@ Range[.2, 1, .2],

       (*The Points*)
       Black, Dynamic[Point[r = MapThread[#1 Clip[#1.#2, {0, 1}] &, {pti, pt}]]],

       (*The Text legends*)
       Dynamic[posText@ r],

       (*The Red Polygon*)
       EdgeForm[{Red, Thick}], Dynamic[Polygon@r]},

      ImageSize -> 550, PlotRange ->1.5 {{-1, 1}, {-1, 1}}], 
    Appearance -> None],
   (*The Footer*)
   Dynamic[Grid[{Table[Norm@r[[i]], {i, n}]}/Total@(Norm /@ r), Dividers->All]]}]
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

在此输入图像描述

  • @belisarius Mods可以删除CW.由于人们不断进行编辑以将其推向首页并因此获得更多选票,因此编辑了适用于10编辑规则的CW.鉴于此处的大部分编辑都是实质性的,在原始发布的几个小时内_and_ mathematica是一个小标签,不会出现在大多数人的头版中,我想你可以尝试让主持人审查你的案例.您可能想在旗帜中解释它. (2认同)

Hei*_*ike 10

也许这样的事情

Manipulate[
 DynamicModule[{mags, pts, bkgrnd, corners},
  corners = N@Table[{Sin[2 Pi i/n], Cos[2 Pi i/n]}, {i, n}];
  mags = N@Table[1/n, {n}];
  pts = mags corners;
  bkgrnd = {{FaceForm[Opacity[0]], EdgeForm[Gray], 
     Polygon[ Table[r corners, {r, .2, 1, .2}]]},
    Table[
     Text[Row[{"Criterion ", i}], 
      1.05 corners[[i]], -corners[[i]]], {i, n}]};

  LocatorPane[
   Dynamic[
    pts, (mags = Norm /@ #; mags = mags/Total[mags]; 
      pts = mags corners) &],
   Dynamic@Graphics[{bkgrnd,
      {FaceForm[], EdgeForm[{Thick, Blue}], Polygon[pts]},
      Table[
       Text[NumberForm[mags[[i]], {4, 2}], 
        pts[[i]], -1.8 corners[[i]]], {i, n}]}, PlotRange -> All],
   Appearance -> Graphics[{PointSize[.02], Point[{0, 0}]}]]],

 {{n, 3}, Range[3, 7]}]
Run Code Online (Sandbox Code Playgroud)

截图:

截图