Changer le style de tracé en fonction du paramètre dans ParametricPlot

Sep 13 2020

Le Manipulateci-dessous produit un chemin traversant le demi-cercle de l'unité supérieure, allant du {1,0}temps 0 {-1,0}au temps 1/2, puis traversant le même demi-cercle supérieur, mais dans le sens inverse, remontant du {-1,0}temps 1/2 {1,0}au temps 1.

Cependant, on ne peut pas "voir" la moitié inverse de la trajectoire, puisqu'elle se trouve au sommet du même demi-cercle, mais traversée en sens inverse, de la moitié avant.

Est-il possible d'utiliser une PlotStyle, ou une autre directive, pour changer le style de la courbe à l'instant 1/2 de sorte que, par exemple, le tracé à partir de là soit plus épais et d'une couleur différente?

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}]

(Je me rends compte qu'il y a un moyen de simuler le résultat que je veux, à savoir, en changeant la fonction fsur le demi-intervalle de {1/2, 1}manière à avoir un rayon légèrement plus grand que 1. Mais je préférerais de beaucoup laisser le rayon inchangé et "simplement "changer le style de l'épaisseur et / ou de la couleur de la courbe sur ce demi-intervalle.)

Réponses

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)]]

Vous pourriez utiliser ColorFunction

ÉDITER:

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

Le tracé d'une seule fonction sans singularités se traduira par un seul Lineobjet, qui ne peut qu'une seule épaisseur. Pour obtenir deux épaisseurs, vous devez tracer deux lignes. Cela peut être acceptable ou non, car cela ne ressemble pas à une seule fonction.

Soit

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

Vous pouvez également utiliser MeshFunctions, Meshet les MeshShadingoptions comme suit:

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}]

Utilisation

MeshShading -> {Directive[AbsoluteThickness[1], Blue], 
     Directive[AbsoluteThickness[7], Dashing[{Large, Medium}], Opacity[.5, Red]]}

obtenir

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}]