在Mathematica中,定位器可以通过LocatorPane
的参数约束到某些屏幕区域(参见LocatorPane文档。)
三个有序对{{{minX, minY}, {maxX, maxY}, {dX, dY}}}
的列表通常是确定定位器行为的关键。 {minX, minY}
和{maxX, maxY}
设置了该区域。 {dX, dY}
设置跳跃大小:无限制为零,每个跃点大小为任何其他正数。
在下面的代码中,{{{-.9, 0}, {1, 0}, {0, 0}}}
设置定位器pts
的区域和跳转。前两个有序对将定位器限制在数字线上的区间[-9,1]。有序对{0, 0}
不对任何一个定位器施加额外约束。但是,由于y值只能为零,由于前两项定义的区域,两个定位器都不能自由离开x轴。
我想将每个定位器限制在myTicks
中的x值。 (在完整的程序中,myTicks会随着时间的推移而改变,具体取决于用户做出的决定。)由于刻度不是沿x均匀分布,因此无法通过为x-jump设置常量值来解决问题。如果该值考虑了定位器的当前位置,则下一个左跳可能与右跳的大小不同。
myTicks = {-.9, 0, .1, .2, .45, .79, 1};
pts = {{.25, 0}, {.75, 0}};
LocatorPane[Dynamic[pts],
Graphics[{},
Axes -> {True, False},
PlotLabel -> Row[{"locators at: " , Dynamic[pts[[1, 1]]], " and ",
Dynamic[pts[[2, 1]]]}],
Ticks -> {myTicks, Automatic}],
{{{-.9, 0}, {1, 0}, {0, 0}}}]
任何建议都将不胜感激!
答案 0 :(得分:3)
我们试试这个:
pts = {{0, 0}, {10, 0}};
myTics = Table[{x, 0}, {x, 0, 10, 5}];
LocatorPane[Dynamic[pts],
ListPlot[myTics, PlotRange -> {{-1, 11}, {-1, 1}},
PlotStyle -> Directive[PointSize[.07], Red],
Epilog -> {PointSize[.05], Blue, h = Point[Dynamic[{Nearest[myTics, pts[[1]]]}]],
PointSize[.03], Yellow, j = Point[Dynamic[{Nearest[myTics, pts[[2]]]}]],
Black,
Text[{"locators at: ", Dynamic[h[[1, 1]]], " and ",Dynamic[j[[1, 1]]]},
{5, .5}]}],
Appearance -> None]
答案 1 :(得分:3)
这似乎有效。
myTicks = {-.9, 0, .1, .2, .45, .79, 1};
DynamicModule[{p = {.25, 0}, p2 = {.75, 0}},
LocatorPane[Dynamic[{p, p2}],
Graphics[{}, Axes -> {True, False},
PlotLabel ->
Row[{"locators at: ",
Dynamic[p[[1]] = Nearest[myTicks, p[[1]]][[1]]], " and ",
Dynamic[p2[[1]] = Nearest[myTicks, p2[[1]]][[1]]]}],
Ticks -> {myTicks, Automatic}], {{{-.9, 0}, {1, 0}}}, ContinuousAction -> False]
]