Tracer un contour dirigé avec des auto-intersections

Sep 04 2020

J'ai une séquence ordonnée de points le long d'un contour plan dirigé fermé avec des auto-intersections. Je dois trouver une courbe continue interpolant ces points et la tracer, avec de petites pointes de flèches indiquant sa direction (de préférence, placées à des intervalles égaux le long de la courbe), et des régions fermées de remplissage de couleur ayant un nombre d'enroulement impair. Ci-dessous, une image que j'ai dessinée manuellement pour expliquer l'idée (elle devrait être plus fluide que cela). Comment puis-je faire cela dans Mathematica ?

Réponses

13 LukasLang Sep 04 2020 at 15:41

Quelque chose pour vous aider à démarrer:

SeedRandom[10]
pts = RandomReal[{0, 1}, {8, 2}];

int = Interpolation[Thread@{N@Subdivide[0, 1, 8], Append[#, First@#] &@pts}, PeriodicInterpolation -> True, InterpolationOrder -> 100];
line = FirstCase[ParametricPlot[int[x], {x, 0, 1}], _Line, Line@{}, All];
Graphics[
 {
  LightGray,
  FilledCurve@line,
  Black,
  Thick,
  Arrowheads@Append[0]@Table[0.05, 10],
  Arrow@JoinedCurve@line,
  Red,
  AbsolutePointSize@5,
  Point@pts
  }
 ]

L'idée principale est d'utiliser Interpolationavec PeriodicInterpolation->Trueet un haut InterpolationOrderpour obtenir la limite. Le InterpolatingFunctionest ensuite échantillonné à l'aide de ParametericPlotpour obtenir un aspect lisse sans simplement échantillonner aveuglément des centaines de fois.

Enfin, l'image est construite en utilisant Arrowet Arrowheadspour le périmètre et FilledCurvepour l'ombrage.