2
$\begingroup$

I want to plot a graph that represents the distance of a moving point on a line and the center of a circle, I want to plot the graph on the right (the red dotted graph)

screenshot of an explanatory image: enter image description here

thanks in advance :)

$\endgroup$

4 Answers 4

6
$\begingroup$
DynamicModule[{pointOnLine, list},
 Manipulate[
  Row[{
   LocatorPane[
    Dynamic@{endA, endB, center},
    Graphics[{
      Circle[center, radius],
      {Dashed, Line[{endA, endB}]},
      PointSize[0.02], Point[pointOnLine],
      {Red, Line[{center, pointOnLine}]}
     },
     PlotRange -> 10,
     Axes -> False, Frame -> True, ImageSize -> Medium
    ]
   ],
   ListPlot[
    list,
    PlotStyle -> Red, AspectRatio -> 1,
    Axes -> False, Frame -> True, ImageSize -> Medium
   ]
  }],
  {{center, {3, 1}}, None},
  {{endA, {-5, 5}}, None},
  {{endB, {0, -5}}, None},
  {{radius, 2}, 1, 8},
  {{positionAlongLine, 0.3}, 0, 1, Appearance -> "Open",
   TrackingFunction -> ((
     positionAlongLine = #;
     pointOnLine = endB + positionAlongLine (endA - endB);
     AppendTo[list, {#, EuclideanDistance[center, pointOnLine]}]
    )&)
  },
  Button["Discard plot points and restart", list = {}],
  Initialization :> (
    list = {}; 
    pointOnLine = endB + positionAlongLine (endA - endB)
  )
 ]
]

a running animation of the distances being collected and plotted

$\endgroup$
4
$\begingroup$
Manipulate[
 Row[{Graphics[{
     Red,
     Circle[{x0, y0}, r]
     , Dashed, Black
     , Line[{{x1, y1}, {x2, y2}}]
     , Line[{{x0, y0}, (1 - t) {x1, y1} + t {x2, y2}}]
     , Red, AbsolutePointSize[6]
     , Point[(1 - t) {x1, y1} + t {x2, y2}]
     , Blue, Point[{x1, y1}]
     , Point[{x2, y2}]
     , Darker@Green
     , Point[{x0, y0}]
     }
    , Frame -> True
    , ImageSize -> 200
    , PlotRange -> {{-5, 5}, {-5, 5}}
    , GridLinesStyle -> {{Gray, Dotted}, {Gray, Dotted}}
    , GridLines -> Automatic
    ],
   , g = RegionDistance[
      Point[{x0, y0}], (1 - t) {x1, y1} + t {x2, y2}];
   , Plot[ EuclideanDistance[(1 - x) {x1, y1} + x {x2, y2}, {x0, y0}]
    , {x, 0, 1}
    , PlotRange -> {{0, 1}, {0, 6}}
    , ImageSize -> 200
    , PlotLabel -> Style[g, Black, 12]
    , GridLinesStyle -> {{Gray, Dotted}, {Gray, Dotted}}
    , GridLines -> Automatic
    , Epilog -> {Red, AbsolutePointSize[6]
      , Point@{t, g} 
      , Dashed, Black
      , Line[{{t, g}, {t, 0}}]
      }
    ]
   }]
 ,
 {{x0, 0}, -1, 1}
 , {{y0, 0}, -1, 1}
 , {{r, 2}, 0, 4}
 , {{x1, 3}, -4, 4}
 , {{y1, 3}, -4, 4}
 , {{x2, -4}, -4, 4}
 , {{y2, -1}, -4, 4}
 , {{t, 0.5}, 0, 1}
 , TrackedSymbols :> All
 ]

enter image description here

$\endgroup$
3
$\begingroup$

EuclideanDistance gives the distance between two points. One way to specify a point on your line is

(1-t){a1,b1} + t {a2,b2}

which moves between the two endpoints as t goes from 0 to 1. The distance to the center of the circle is

EuclideanDistance[(1-t){a1,b1} + t {a2,b2}, {x0,y0}]

Giving numerical values to the endpoints and center, you can then plot this distance to get the distance plot. For example, with endpoints {0,3} and {1,0} and circle center at {3,2} gives

enter image description here

$\endgroup$
0
$\begingroup$

My goodness... all this code can be eliminated if you recall Pythagoras' Theorem: $d = \sqrt{h^2 + s^2}$ where $h$ is the distance from the circle's center to the nearest point on the line (call it $P$) and $s$ is the distance of the point in question from $P$.

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.