3
Manipulate[
 Graphics[Rotate[Line[{{0, 0}, p}], \[Theta], {0, 0}], 
  PlotRange -> 2], {{p, {1, 1}}, Locator}, {\[Theta], 0, 2 \[Pi]}]

I want to rotate a graph including a locator. The line rotated as expected, but the locator didn't rotate with the line. How can I do to rotate the whole graph?

enter image description here

kglr
  • 394,356
  • 18
  • 477
  • 896
pmzhu
  • 95
  • 4

2 Answers2

5

(1) You can use Locator as a graphics primitive and rotate all the graphics primitives, and
(2) use Experimental`AngularSlider to control the angle:

Manipulate[Graphics[Rotate[{Line[{{0, 0}, p}], Locator[Dynamic[p]]}, θ, {0, 0}], 
   PlotRange -> 2, ImageSize -> Small],
 {{p, {1, 0}}, None},
 {{θ, 0, ""}, 0, 2 π, Labeled[Experimental`AngularSlider[#, {0, 2 Pi}, 
     Experimental`BoundaryAction -> None], Row[{"θ = ", #}], Top] &}, 
 Deployed -> True]

enter image description here

To prevent the locator from going out of plot area after rotation, we can use the second argument of Dynamic to restrict the locator to stay within a disk of radius 2:

Manipulate[Graphics[Rotate[{Line[{{0, 0}, p}], 
    AbsolutePointSize[10], Red, Point[p], 
    Locator[Dynamic[p, (p = If[Norm[#] < 2, #, 2 Normalize[#]];) &], None]}, 
    θ, {0, 0}], PlotRange -> 2,  ImageSize -> Small],
 {{p, {1, 0}}, None}, 
 {{θ, 0, ""}, 0, 2 π, Labeled[Experimental`AngularSlider[#, {0, 2 Pi}, 
     Experimental`BoundaryAction -> None], Row[{"θ = ", #}], Top] &}, 
 Deployed -> True]

enter image description here

Update: If you want the two controls linked so that the angle is updated as the locator moves, change Locator[...] to

Locator[Dynamic[p, (p = If[Norm[#] < 2, #, 2 Normalize[#]]; θ = ArcTan @@ p) &], None]
kglr
  • 394,356
  • 18
  • 477
  • 896
  • +1 for the usage of ExperimentalAngularSlider` wow!! Why does it turn black at certain points? – CA Trevillian Mar 04 '20 at 21:02
  • 1
    @CATrevillian, i think it is an artifact of the screen shot image (I use ScreenToGif gif generator). – kglr Mar 04 '20 at 21:14
  • I've never heard of ExperimentalAngularSlider` before, that's solve my problem perfectly which I had gave up long time ago, thank you very much. – pmzhu Mar 05 '20 at 12:32
  • @pmzhu, my pleasure. Thank you for the accept. – kglr Mar 05 '20 at 12:38
3
Manipulate[
 Rotate[Graphics[Plot[x^2, {x, 0, 5}]], r = ArcTan[r1[[1]]/r1[[2]]]],
 {{r1, {1, 1}}, Locator}]
David G. Stork
  • 41,180
  • 3
  • 34
  • 96