Как я могу сделать направленную дугу окружности (или направленную кривую)?

Я хотел бы отобразить направленную дугу окружности в системе Mathematica, используя что-то столь же простое, как Стрелка . Лучшее, что мне удалось придумать, - это пример, в котором стрелка прибивается к одному концу дуги окружности. Но я подозреваю, что есть более прямой способ добиться того же эффекта.

start=\[Pi];
Manipulate[
Graphics[{
   Arrow[{{Cos[\[Theta] + If[\[Theta] < start, .01, -.01]], 
           Sin[\[Theta] + If[\[Theta] < start, .01, -.01]]}, 
          {Cos[\[Theta]], Sin[\[Theta]]}}],
   Circle[{0, 0}, 1, {start, \[Theta]}]},
PlotRange -> 2], 
{{\[Theta], .7 start}, 0, 2 start} 
           ]

arrow

Стрелка принимает BSplineCurves и BezierCurves , но я не могу заставить их оставаться на круговой диаграмме. дуга. Tube принимает формулу кривой в 3D, но я не могу понять, как заставить ее работать в 2D.

Все предложения приветствуются. Марк МакКлюр показал, что Arrow сама может справиться с требованиями, если ему дан список точек.

yoda дал довольно общее решение, используя ParametricPlot.

В итоге я нашел предложения Велисария наиболее полезными. Его подход заключался в работе с небольшими вариациями знакомых графических объектов. В конце концов, я осторожно выбрал определение нового объекта, arcArrow , который использует параметры Circle : центр, радиус, {начало, конец}. Снять защиту все еще пугает меня! Во всяком случае, вот с чем я остановился. Я также упорно держался некоторые черты моего оригинального подхода

Manipulate[
 Graphics[{  
   arcArrow[center, radius, {start, end}],
   PointSize[Large], Blue, If[showCenter, Point[center]]},
  PlotRange -> p, ImageSize -> 250],
 {{start, \[Pi]/2}, -2 \[Pi], 2 \[Pi], ImageSize -> Small},
 {{end, 0}, -2 \[Pi], 2 \[Pi], ImageSize -> Small},
 {{radius, 1}, 1/2, 4, ImageSize -> Small},
 {{center, {0, 0}}, {-p, -p}, {p, p}, Slider2D},
 {showCenter, {True, False}},

 Initialization :> {p = 3;
   arcArrow[a_, r_, {start_, end_}] :=
    {Circle[a, r, {start, end}], 
     Arrowheads[Medium],
     Arrow[{a + r {Cos[end + If[end < start, .01, -.01]], 
                   Sin[end + If[end < start, .01, -.01]]}, 
            a + r {Cos[end], Sin[end]}}]} }]

final version


9
задан Robert Harvey 14 June 2011 в 19:44
поделиться