Локатори

Какво е локатор?

Locator[]

Къде се използва?

Graphics

Graphics[Locator[]]

Локаторът е вид примитив и можем да го използваме като елемент на списък от други примитиви. Също можем да добавяме и възможните опции на Graphics.

Graphics[Locator[],Frame->True,ImageSize->200]

Graphics[{Text["Локаторът МИ!",{0,2.8}],
Arrow[{{0,3},{0.9,3.8}}],
{Red,Thickness[0.02],BSplineCurve[{{-1,2.5},{3,2},{-1,4.5}}]},
 Locator[{1,4}]},Frame->True,ImageSize->200,PlotRange->{{-1.5,1.5},{1.5,4.5}}]

Manipulate

Manipulate[a,{a,Locator}]

Manipulate[Graphics[{Text["Локаторът МИ!",{0,2.8}],
Arrow[{{0,3},{0.9,3.8}}],
{Red,Thickness[0.02],BSplineCurve[{{-1,2.5},{3,2},{-1,4.5}}]}},Frame->True,ImageSize->200,PlotRange->{{-1.5,1.5},{1.5,4.5}}],{a,Locator}]

Свързваме елементите от графиката с локатора
1. Определяме начална стойност на локатора:

Manipulate[Graphics[{Text["Локаторът МИ!",{0,2.8}],
Arrow[{{0,3},{0.9,3.8}}],
{Red,Thickness[0.02],BSplineCurve[{{-1,2.5},{3,2},{-1,4.5}}]}},Frame->True,ImageSize->200,PlotRange->{{-1.5,1.5},{1.5,4.5}}],{{a,{1,4}},Locator}]

2. Насочваме стрелката към локатора:

Manipulate[Graphics[{Text["Локаторът МИ!",{0,2.8}],
Arrow[{{0,3},a}],
{Red,Thickness[0.02],BSplineCurve[{{-1,2.5},{3,2},{-1,4.5}}]}},Frame->True,ImageSize->200,PlotRange->{{-1.5,1.5},{1.5,4.5}}],{{a,{1,4}},Locator}]

3. Сплайн-кривата се изменя в зависомост от локатора:

Manipulate[Graphics[{Text["Локаторът МИ!",{0,2.8}],
Arrow[{{0,3},a}],
{Red,Thickness[0.02],BSplineCurve[{{-1,2.5},{3,2},a,b,{-1,4.5}}]}},Frame->True,ImageSize->200,PlotRange->{{-1.5,1.5},{1.5,4.5}}],{{a,{1,4}},Locator},{{b,{-1,2}},Locator}
]

3. Опции на локатора:
	3.1. Appearence

Manipulate[Graphics[{Text["Локаторът МИ!",{0,2.8}],
Arrow[{{0,3},a}],
{Red,Thickness[0.02],BSplineCurve[{{-1,2.5},{1,2},a,b,{-1,3}}]}},Frame->True,ImageSize->200,PlotRange->{{-1.5,1.5},{1.5,4.5}}],{{a,{1,4}},Locator,Appearance->Text[Style["\[FreakedSmiley]",30]]},{{b,{-1,2}},Locator}
]

3. Опции на локатора:
	3.1. LocatorAutoCreate

Manipulate[Graphics[{Text["Локаторът МИ!",{0,2.8}],{Red,Thickness[0.02],BSplineCurve[a]}},Frame->True,ImageSize->200,PlotRange->{{-1.5,1.5},{1.5,4.5}}],{{a,{{1,4},{-1,2}}},Locator,Appearance->Text[Style["\[FreakedSmiley]",30]],LocatorAutoCreate->True}
]

Задания са самостоятелна работа

Group A

g[x_]:=(x^2);
M1=Manipulate[Plot[g[x],{x,-2,2},Epilog->{Arrow[{p,{p[[1]],g[p[[1]]]}}],Arrow[{p,{(Sqrt[p[[2]]]),p[[2]]}}]}],{{p,{0,g[0]}},Locator},
FrameLabel->"Group A"]

Group B

M2 = Manipulate[Graphics[{Line[{{0, 0}, points[[1]]}], Dashed, Line[{{points[[1, 1]], 0}, points[[1]], {0, points[[1, 2]]}}],
    Text["Group B", {0, -2}]},
   Axes -> True, PlotRange -> 3, Ticks -> {{points[[1, 1]]}, {points[[1, 2]]}}, ImageSize -> Small], {{points, {{1, 1}}}, {-3, -3}, {3, 3}, Locator}]

Group A&B

GraphicsRow[{M1,M2}]