在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轴.
我想将每个定位器限制在x值中myTicks.(在完整的程序中,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}, …Run Code Online (Sandbox Code Playgroud)