多语言展示
当前在线:1343今日阅读:86今日分享:14

用Mathematica处理几何问题——定位器Locator

用Mathematica处理几何问题,可以有效地避免大量计算。而如果加入定位器(Locator)以后,就可以拖动几何点(有点类似于几何画板上的自由点),可以更便利地观察各种图形。
工具/原料
1

电脑

2

Mathematica

方法/步骤
1

Locator[{x,y}]表示在点{x,y}处设置一个定位器。这里所谓的定位器,可以用鼠标拖动,就像是几何画板上面的自由点。例如,在原点设置定位器:Graphics[Locator[{0, 0}], PlotRange -> 2]

2

随着定位器的移动,其对应的坐标也发生变化,下面就把坐标的变化显示出来:DynamicModule[{p = {0, 0}}, {Graphics[Locator[Dynamic[p]],    PlotRange -> 2], Dynamic[p]}]

3

在点(1,1)处放置定位器,且与原点连结线段,当拖动定位器的时候,线段也随时发生变化:Manipulate[ Graphics[Line[{{0, 0}, p}], PlotRange -> 2], {{p, {1, 1}}, Locator}]

4

把定位器设置成字母的模样:Show[Graphics[Locator[{0, 0}, Style['A', FontSize -> 20]],   PlotRange -> 2], Graphics[Locator[{0, 1}, Style['B', FontSize -> 20]],   PlotRange -> 2]]        图中的字母“A”和“B”就是定位器。

5

再用三个蓝色的同心圆作为定位器:l = Graphics[{Blue, Table[Circle[{0, 0}, i], {i, 3}]},    ImageSize -> 20];Graphics[Locator[{0, 0}, l], PlotRange -> 1]

6

把定位器局限在一个蓝色圆盘的边界上,用鼠标拖动定位器的时候,定位器只能在圆盘边界转动:Deploy[DynamicModule[{p = {1, 0}},   Graphics[{Lighter[Blue], Disk[],     Locator[Dynamic[p, (p = Normalize[#]) &]]}, PlotRange -> 2.0]]]

7

指定定位器不同的型号,放在同一个列表里加以比较:Table[Graphics[  Locator[{0, 0}, Appearance -> p]], {p, {Tiny, Small, Medium,    Large}}]

8

用AutoAction ,定位器会黏到鼠标上:DynamicModule[{p = {0.5, 0.5}}, {Graphics[   Locator[Dynamic[p], AutoAction -> True], PlotRange -> 2],   Dynamic[p]}]

9

给定位器加上彩色背景,放在列表里加以比较:Table[Graphics[  Locator[{0, 0}, Background -> c]], {c, {Pink, Green, Gray, Yellow}}]

10

让定位器的背景颜色随着位置的改变而改变:DynamicModule[{pt = {0, 0}},  Framed@Graphics[   Locator[Dynamic[pt], Background -> Dynamic[Hue[Norm[pt]]]],    PlotRange -> 1]]

11

用数字指定定位器的大小,放在列表里比较:Table[Graphics[  Locator[{0, 0}, ImageSize -> m]], {m, {10, 30, 50, 80}}]

12

两个定位器之间连线段,并实时显示线段的长度和斜率:DynamicModule[{p1 = {0, 0},   p2 = {1, 1}}, {Dynamic@   Graphics[{Arrow[{p1, p2}], Locator[Dynamic[p1]],      Locator[Dynamic[p2]]}, PlotRange -> 2],   Dynamic[Grid[{{'Length:', EuclideanDistance[p1, p2]}, {'Slope:',       1/Divide @@ (p2 - p1)}}]]}]

13

用定位器与原点的连线作为共轭直径来绘制椭圆:DynamicModule[{v1 = {2, 0}, v2 = {-1, 1}},  Dynamic@Graphics[{Circle[], Red,     GeometricTransformation[Circle[], Transpose[{v1, v2}]], Green,     Line[{{0, 0}, v1}], Line[{{0, 0}, v2}], Locator[Dynamic[v1]],     Locator[Dynamic[v2]]}, PlotRange -> 3]]

14

让定位器参入曲线的插值拟合:DynamicModule[{pts = {{0, 0}, {1, 1}, {2, 0}, {3, 2}}},  LocatorPane[Dynamic[pts],   Dynamic[Plot[InterpolatingPolynomial[pts, x], {x, 0, 3},     PlotRange -> 3]]]]

15

用定位器的坐标定义的Julia分形粗略图:DynamicModule[{pt = {0.25, 0.25}, julia},  julia[z_] :=   Abs@Table[    NestWhile[#^2 + z &, i + I j, Abs[#] < 4 &, 1, 20], {i, -1,      1, .05}, {j, -1, 1, .05}]; Framed@Dynamic@   Graphics[{Raster[      julia[Complex @@ pt], {pt - {.5, .5}, pt + {.5, .5}}],      Locator[Dynamic[pt]]}, PlotRange -> 1]]

16

用定位器绘制多焦点曲线——把不同的焦点设为定位器,并且把定位器用不同的字母表示:  三焦点曲线——Manipulate[xy = {x, y}; Show[ContourPlot[   Norm[xy - a] + Norm[xy - b] + Norm[xy - c] == p, {x, -3,     3}, {y, -3, 3}],   Graphics[Line[{a, b, c, a}], PlotRange -> 3]], {{a, {0, 0}},   Locator, Appearance -> 'A'}, {{b, {0, 1}}, Locator,   Appearance -> 'B'}, {{c, {1, 1}}, Locator, Appearance -> 'C'},  Dynamic[a], Dynamic[b], Dynamic[c], {p, 2, 10}]  四焦点曲线——Manipulate[xy = {x, y}; Show[ContourPlot[   Norm[xy - a] + Norm[xy - b] + Norm[xy - c] + Norm[xy - d] ==     p, {x, -3, 3}, {y, -3, 3}],   Graphics[Line[{a, b, c, d, a}], PlotRange -> 3]], {{a, {0, 0}},   Locator, Appearance -> 'A'}, {{b, {0, 1}}, Locator,   Appearance -> 'B'}, {{c, {1, 1}}, Locator,   Appearance -> 'C'}, {{d, {1, 0}}, Locator, Appearance -> 'D'}, {p,   2.85, 10}]

注意事项
1

用Mathematica处理几何问题,不学定位器,就亏啦!

2

多焦点曲线的代码需要优化。明显卡顿,尤其是当焦点(定位器)多于5个的时候,Mathematica几乎gu yong不动了!

推荐信息