Я бы хотел отобразить направленную круговую дугу в Mathematica, используя что-то простое, например Arrow
.Лучшее, что я смог придумать, - это пример, который прибивает Arrow
к одному концу дуги окружности.Но я подозреваю, что есть более прямой способ достижения того же эффекта.
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.
Все предложения приветствуются.Если ваше решение работает для любой 2D-кривой , тем лучше!
Эпилог:
Я многому научился из предложенийМарк МакКлюр показал, что Arrow
сам может справиться с требованиями, когда ему предоставлен список точек.
Йода дал довольно общее решение, используя ParametricPlot.
В итоге я нашел предложения Велисария наиболееполезно.Его подход заключался в работе над небольшими вариациями знакомых графических объектов.В конце я осторожно решил определить новый объект, arcArrow
, который использует параметры Circle
: центр, радиус, {начало, конец}.Unprotect
все еще пугает меня!Во всяком случае, вот что я решил.Я также упорно держался некоторые черты моего оригинального подхода.
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]}}]} }]
1037 *