Alterar o estilo do gráfico como função do parâmetro em ParametricPlot
O que se Manipulatesegue produz um caminho que atravessa o semicírculo da unidade superior, indo do {1,0}tempo 0 ao {-1,0}tempo 1/2 e, em seguida, percorre o mesmo semicírculo superior, mas na direção inversa, voltando do {-1,0}tempo 1/2 para o {1,0}tempo 1.
No entanto, não se pode "ver" a metade reversa do caminho, pois ela está no topo do mesmo semicírculo, mas é percorrida na direção reversa, da metade anterior.
É possível usar uma PlotStyle, ou outra diretiva, para alterar o estilo da curva no tempo 1/2 para que, por exemplo, o gráfico a partir de então seja mais espesso e com uma cor diferente?
f[t_ /; 0 <= t <= 1/2] := ReIm[Exp[2 \[Pi] I t]]
f[t_ /; 1/2 < t <= 1] := ReIm[Exp[2 \[Pi] I (1 - t)]]
Manipulate[
ParametricPlot[f[t], {t, 0, v},
PlotRange -> {{-1, 1}, {-1, 1}}], {{v, 0.01}, 0.01, 1}]
(Eu percebo que há uma maneira de falsificar o resultado que desejo, a saber, alterando a função fno meio-intervalo de {1/2, 1}modo a ter um raio ligeiramente maior que 1. Mas eu preferiria deixar o raio inalterado e "apenas "altere o estilo da espessura e / ou cor da curva nesse meio-intervalo.)
Respostas
Clear["Global`*"]
f[t_ /; 0 <= t <= 1/2] := ReIm[Exp[2 \[Pi] I t]]
f[t_ /; 1/2 < t <= 1] := ReIm[Exp[2 \[Pi] I (1 - t)]]
Você poderia usar ColorFunction
EDITAR:
Manipulate[
ParametricPlot[f[t], {t, 0, v},
PlotRange -> {{-1, 1}, {-1, 1}},
ColorFunction -> (If[#3 < 1/2, Blue, Red] &),
ColorFunctionScaling -> False],
{{v, 0.01}, 0.01, 1, 0.01, Appearance -> "Labeled"}]
O gráfico de uma única função sem singularidades resultará em um único Lineobjeto, que pode ter apenas uma única espessura. Para obter duas espessuras, você precisaria desenhar duas linhas. Isso pode ou não ser aceitável, pois não se parece com uma única função.
Ou
Manipulate[
ParametricPlot[{
Style[ConditionalExpression[f[t], t <= 1/2], AbsoluteThickness[1], Blue],
Style[ConditionalExpression[f[t], t >= 1/2], AbsoluteThickness[3], Red]},
{t, 0, v},
PlotRange -> {{-1, 1}, {-1, 1}},
PlotRangePadding -> Scaled[0.01]],
{{v, 0.01}, 0.01, 1, 0.01, Appearance -> "Labeled"}]
ou
Manipulate[
ParametricPlot[{
ConditionalExpression[f[t], t <= 1/2],
ConditionalExpression[f[t], t >= 1/2]},
{t, 0, v},
PlotRange -> {{-1, 1}, {-1, 1}},
PlotStyle -> {
Directive[AbsoluteThickness[1], Blue],
Directive[AbsoluteThickness[3], Red]},
PlotRangePadding -> Scaled[0.01]],
{{v, 0.01}, 0.01, 1, 0.01, Appearance -> "Labeled"}]
Você também pode usar MeshFunctions, Meshe MeshShadingopções como segue:
Manipulate[ParametricPlot[f[t], {t, 0, v},
MeshFunctions -> {#3 &},
Mesh -> {{1/2}},
MeshStyle -> None,
MeshShading -> {Directive[CapForm["Butt"], AbsoluteThickness[7], Blue],
Directive[CapForm["Butt"], AbsoluteThickness[4],
Dashing[{Large, Medium}], Red]},
PlotRange -> {{-1, 1}, {-1, 1}} 1.1],
{{v, 0.01}, 0.01, 1}]
Usar
MeshShading -> {Directive[AbsoluteThickness[1], Blue],
Directive[AbsoluteThickness[7], Dashing[{Large, Medium}], Opacity[.5, Red]]}
para obter
f[t_ /; 0 <= t <= 1/2] := ReIm[Exp[2 π I t]]
f[t_ /; 1/2 < t <= 1] := ReIm[Exp[2 π I (1 - t)]]
Manipulate[
ParametricPlot[f[t], {t, 0, v}, PlotRange -> {{-1, 1}, {-1, 1}},
ColorFunction -> Function[{t}, If[t > 1/4, Blue, Black]],
ColorFunctionScaling -> False], {{v, 0.01}, 0.01, 1}]
Manipulate[
ParametricPlot[f[t], {t, 0, v}, PlotRange -> {{-1, 1}, {-1, 1}},
PlotStyle -> If[v > 1/4, {Blue, Bold}, {Black, Dashed}]], {{v,
0.01}, 0.01, 1}]