我想在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曲线,则更好!
结语:
我从这些建议中学到了很多:
Mark McClure表明,当给出点列表时,Arrow
本身可以处理要求。
yoda使用ParametricPlot提供了一个相当通用的解决方案。
最终,我发现belisarius的建议最有帮助。 他的方法是在熟悉的图形对象的微小变化上进行操作。 最后,我谨慎地选择定义一个新对象arcArrow
,它使用Circle
的参数:中心、半径、{start,finish}。 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]}}]} }]