Ich denke, Sie haben die richtige Idee, aber die Ausführung wird eine enorme Herausforderung sein. Ich nehme an, wenn Sie "in einer SVG-Datei" sagen, meinen Sie, dass die Form durch einen (oder mehrere - Ihre Beispielfigur hat ein internes Loch!) Strichpfade definiert wird. Leider können SVG-Pfade mit quadratischen und kubischen Bezier-Kurven und elliptischen Bogensegmenten bemerkenswert kompliziert sein. Der Schnittpunkt einer Linie mit einem dieser Punkte ist ein gelöstes, aber höchst nicht triviales Problem, und selbst die Neuparametrisierung von Bezier-Kurven, um sie am Schnittpunkt in zwei Teile zu teilen, ist ein wenig schwierig - im Grunde genommen was Sie suchen ist komplex genug, um ein kleines Buch zur Beantwortung zu nehmen, keinen Forumsbeitrag! Das heißt, es gibt mehrere ausgezeichnete Referenzen da draußen; der kurze kurzDie Version der Antwort lautet, dass Sie die rekursive Unterteilung zusammen mit der sogenannten "Variationsverringerung" -Eigenschaft der Bezier-Kurve (im Wesentlichen der Eigenschaft, dass eine Bezier-Kurve in der konvexen Hülle ihrer Kontrollpunkte enthalten ist) verwenden möchten, um sie einzugrenzen die möglichen Positionen einer Kreuzung (und beachten Sie, dass eine Linie mehrere Schnittpunkte haben kann, und dies ist ein weiterer Sonderfall, den Sie möglicherweise berücksichtigen müssen). Und wenn Sie das Kreuzungsproblem gelöst haben, haben Sie noch einen langen Weg vor sich - Sie müssen eine Menge Buchhaltung erledigen, um Kurven- und Liniensegmente im Auge zu behalten und sie korrekt in Teile zu unterteilen. Dies soll Sie überhaupt nicht entmutigen; Sei dir nur der Größe dessen bewusst, was du versuchst zu tun!
Glücklicherweise Ihre andere Frage: "Kann ich die Schnittlinie von Figuren ändern, um ihnen eine Krümmung zu geben?" - hat eine einfachere Antwort: absolut. Da Sie sich bereits im SVG-Land befinden, würde ich auch hier Bezier-Kurven verwenden: Wählen Sie zunächst fünf Punkte p1..p5 entlang des Liniensegments aus, das Sie "auskrümmen" möchten, wahrscheinlich etwas zufällig in ungefähr gleichmäßigen Abständen ;; Verschieben Sie sie dann um einen kleinen zufälligen Abstand von der Linie und verwenden Sie sie als Kontrollpunkte für zwei separate Bezier-Kurven, wobei eine die Punkte p0, p1, p2, p3 und die andere die Punkte p3, p4, p5 und p6 verwendet (wobei p0) und p6 sind hier die beiden Endpunkte des ursprünglichen Liniensegments). Sie können auch hier die Konvex-Rumpf-Eigenschaft der Bezier-Kurve nutzen und sicherstellen, dass Ihre verschobenen Punkte nicht angezeigt werden. t zu weit verschieben, sodass die beiden Bereiche zu beiden Seiten der Kurve (n) immer noch einfache Bereiche sind. Dies sollte Ihnen die Art von gekrümmter Grenze geben, nach der Sie suchen.