Я хотел бы отобразить направленную дугу окружности в системе 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}
]
Стрелка
принимает 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]}}]} }]