Alterar o estilo do gráfico como função do parâmetro em ParametricPlot

Sep 13 2020

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

3 BobHanlon Sep 13 2020 at 02:01
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"}]
3 MichaelE2 Sep 13 2020 at 04:20

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"}]
1 kglr Sep 13 2020 at 07:07

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

SteffenJaeschke Sep 13 2020 at 01:02
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}]